完数的判断
代码展示
#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; }