题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数。
思路:
1.先找出一个数的全部因子,求和与这个数进行比较。
2.因本身也是因子,所以只需因子求和减去本身等于本身,即是完数。
3.单独对完数进行格式化输出。
算法思路:
1.一个数的因子是俩俩结合,例如:6=2*3;12=2*6;一小一大,求出一个因子,另一个因子可用i/j得出。
2.循环条件因此可进行减少,开方i即可。
代码块:
#include <stdio.h> int main(void) { int i, j, sum, n; for(i = 2;i <= 1000; i++) { sum = 0; for(j = 1;j*j <= i;j++) {//j为除数,开方i可减少一半计算量 if(i%j == 0)//可以整除,其为因子 { sum = j + i/j + sum;//因子之和,算上i本身,因为本身也为因子 } } if((sum - i) == i )//因子之和减去本身若等于本身,则是为完数 {//对完数进行格式化输出 printf("%4d is wanshu:",i); for(n = 1; n < i; n++) {//将完数单独拿出来分解因数进行输出 if(i%n == 0) { printf("%d ", n);//输出因数 } } printf("\n"); } } }
结果演示:
6 is wanshu:1 2 3 28 is wanshu:1 2 4 7 14 496 is wanshu:1 2 4 8 16 31 62 124 248