完数的判断
代码展示
#include <stdio.h>
int main()
{
int N;
scanf("%d", &N);
int yinzi[N]; //用来存放所查询的数的因子,打印需要
int sum = 0; //因子总和
int n = 0; //含有因子的个数
int i, j, k;
for (i = 2; i < N; i++) //遍历N之内的所有数,从2~N
{
for (j = 1; j <= i/2; j++) //用该数除以该数内所有数,若余数为0,则为其因子,不考虑它本身
//加快速度1 一个数的因子不可能超过它的1/2
{
if (i % j == 0)
{
yinzi[n++] = j;
sum += j; //对因子求和
if (sum > i) //加快速度2 当求得sum已经大于该数的时候,提前break
{
sum = 0;
n = 0;
break;
}
}
}
if (sum == i)
{
printf("%d its factors are ", i);
for (k = 0; k < n; k++)
printf("%d ", yinzi[k]);
printf("\n");
}
sum = 0; //注意清0
n = 0;
}
return 0;
}