【蓝蓝计算机考研算法训练第二期】-day1

127 阅读1分钟

1、从键盘输入一个整数,判断该数是否为素数

什么是素数

素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

思路:

设置一个输入值n,再设置一个bool值初始为false,进行两重循环,如果有两个数相乘等于n而且这两个数均不为1,则让bool==true。最后如果bool为true,不是素数,bool为false,则是素数

具体实现:

//判断一个数是否为素数
#include <stdio.h>
#include <stdbool.h>
int main() {
    int n;
    printf("请输入数字\n");
    while(scanf("%d",&n)!=EOF){
        bool A=false;
        for(int i=1;i<=n;i++){
            for(int j =1;j<=n;j++){
                if(i*j==n&&(i!=1&&j!=1)){
                    A=true;
                }
            }
        }
        if(A==true){
            printf("不是素数");
        } else{
            printf("是素数");
        }
        printf("\n");
    }
}

2、求解从2到20000的所有完数。

什么是完数? 假设一个数为n,除n外所有因数之和为n的数,如6的因数为1,2,3,6。除6外,1,2,3相加等于6,说明6为完数。

思路:设置两层for循坏,外层是i(2-20000),内层是从j(1到i-1),如果i%j==0,则sum+=j,最后判断sum与i的值是否相等

代码:

//求完数
#include <stdio.h>

int main() {

    for(int i=2;i<=20000;i++){
        int sum=0;
        for(int j=1;j<i;j++){
            if(i%j==0){
                sum+=j;
            }
        }
        if(sum==i){
            printf("%d",i);
            printf("\n");
        }
    }
}