# include <stdio.h> |
|
6分 |
修改如下:
int main() { int n, i, s; for (n = 2; n <= 1000; n++) { s = 0; for (i = 1; i < n; i++) { if (n % i == 0) s = s + i; } if (s == n) { printf("%d是完全数。它的因子是:", n); for (i = 1; i < n; i++) { if (n % i == 0) printf("%d ", i); } printf("\n"); } } return 0; } |
7分 |
一个高效点的版本:
int factors[100]; //存放因子 int main() { int n, i, j, s; for (n = 2; n <= 1000; n++) { s = 0; j = 0; for (i = 1; i <= n/2; i++) { if (n % i == 0) { s = s + i; factors[j++] = i; //记录n的因子 } } if (s == n) { printf("%d是完全数。它的因子是:", n); for (i = 0; i < j; i++) printf("%d ", factors[i]); printf("\n"); } } return 0; } //6是完全数。它的因子是:1 2 3 //28是完全数。它的因子是:1 2 4 7 14 //496是完全数。它的因子是:1 2 4 8 16 31 62 124 248 |
7分 |
第二个for循环应该只包含紧跟它的if语句,你的目的是对穷举找出n的每个因子并求和。在你的源代码里,把第二个if也包含在内,就会在求n因子的过程中(还没有完全求完,只是部分因子)得到的和与n相同,然后就会输出全部。
|
多谢各位高手指点!
|