mirror of
https://github.com/m1ngsama/code4sk.git
synced 2025-12-25 02:56:17 +00:00
58 lines
No EOL
1.2 KiB
C++
58 lines
No EOL
1.2 KiB
C++
/* 7-9 找完数
|
||
分数 10
|
||
作者 陈建海
|
||
单位 浙江大学
|
||
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
|
||
|
||
输入格式:
|
||
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
|
||
|
||
输出格式:
|
||
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
|
||
|
||
输入样例:
|
||
2 30
|
||
输出样例:
|
||
6 = 1 + 2 + 3
|
||
28 = 1 + 2 + 4 + 7 + 14
|
||
代码长度限制
|
||
16 KB
|
||
时间限制
|
||
400 ms
|
||
内存限制
|
||
64 MB */
|
||
|
||
#include <stdio.h>
|
||
int main()
|
||
{
|
||
int m, n, i, j, k, N = 1, flag = 0, sum = 0;
|
||
scanf("%d %d", &m, &n);
|
||
for (i = m; i <= n; i++)
|
||
{
|
||
flag = 0;
|
||
sum = 0;
|
||
for (j = 1; j <= i / 2; j++)
|
||
{
|
||
if (i % j == 0)
|
||
sum += j;
|
||
}
|
||
if (sum == i)
|
||
flag = 1;
|
||
if (flag)
|
||
{
|
||
N = 0;
|
||
printf("%d = 1", i);
|
||
for (k = 2; k <= i / 2; k++)
|
||
{
|
||
if (i % k == 0)
|
||
{
|
||
printf(" + %d", k);
|
||
}
|
||
}
|
||
printf("\n");
|
||
}
|
||
}
|
||
if (N)
|
||
printf("None\n");
|
||
return 0;
|
||
} |