- 题目描述:
-
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。
求出2到60之间所有“完数”和“盈数”。
- 输入:
-
题目没有任何输入。
- 输出:
-
输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 ......(ei为完数)
G: g1 g2 g3 ......(gi为盈数)
其中两个数之间要有空格,行尾不加空格。
- 样例输入:
- 样例输出:
思路:
求因子,只需要从1算到sqrt(n)即可,后面的除n即可求到。
代码:
#include <stdio.h> int main(void) { int n, i, j; int e[60], g[60]; int ecount, gcount; int sum; n = 60; ecount = 0; gcount = 0; for (j=2; j<=n; j++) { sum = 0; for (i=1; i<=j/2; i++) { if (j % i == 0) sum += i; } //printf("sum=%d", sum); if (sum == j) { e[ecount] = j; ecount ++; } if (sum > j) { g[gcount] = j; gcount ++; } } printf("E: "); for (j=0; j<ecount; j++) { printf("%d", e[j]); if (j != ecount-1) printf(" "); } printf(" "); printf("G: "); for (j=0; j<gcount; j++) { printf("%d", g[j]); if (j != gcount-1) printf(" "); } printf(" "); return 0; } /************************************************************** Problem: 1060 User: liangrx06 Language: C Result: Accepted Time:0 ms Memory:908 kb ****************************************************************/