code4sk/c/sourcecode/朱森森带领的奇妙冒险/2022-2023第二学期单开班第1次月考/找完数.cpp
2023-12-15 22:38:26 +08:00

58 lines
No EOL
1.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 7-9 找完数
分数 10
作者 陈建海
单位 浙江大学
所谓完数就是该数恰好等于除自身外的因子之和。例如6=1+2+3其中1、2、3为6的因子。本题要求编写程序找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n1<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;
}