学渣跟你一起学"完数" (附详细注释) 大家一起努力
题目:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程找出999以内的所有完数。
#include<stdio.h>
int main(){
static int k[10]; //定义一个数组用于依次储存完数的每个因子
int n,num;
for(int i=2;i<1000;i++){ //for循环遍历 由完数定义可知1~999的完数应从2开始
n=-1;
num=i;
for(int j=1;j<i;j++){ //for循环遍历 除数j,应小于i 范围 1~i
if((i%j)==0){ //判断除数j能否被 被除数i整除 此处是为找出i所有因子
n++; //能整除则数组系数n加1
num=num-j; // 被除数num(之前赋值num=i)减去除数j 得新的被除数 再进行次运算
//因为完数等于它的因子之和,用完数num减去他所有的因子应该刚好为0
//例如: 6/1=6 余数为0 此时 第一轮 num=6 j=1 num=6-1=5,
// 第二轮: 6/2=3 余数为0 num=5 j=2 num=5-2=3
// 第二轮: 6/3=3 余数为0 num=5 j=3 num=3-3=0
k[n]=j; // 依次储存完数的每个因子
}
}
if(num==0){ //num最后剩余是否为0,为0则是完数.因为完数等于它的因子之和,用完数num减去他所有的因子应该刚好为0
printf("%d 是完数其因子为:",i); //输出判断出的完数i
for(int z=0;z<=n;z++) //for循环遍历从0~n
printf("%d,",k[z]); //打印每个因子
printf("\n"); //输出换行
}
}
return 0;
}
|