一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。

题目内容

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。

现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。

提示:可以写一个函数来判断某个数是否是完数。

输入格式

两个正整数,以空格分隔。

输出格式

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一行文字:
NIL
(输出NIL三个大写字母加回车)。

输入样例

1 10

输出样例

6

限制

时间限制:500ms 内存限制:32000kb

代码实现

C语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<stdio.h>

int isPerfect(int n)
{
int isPerfect = 0;
int sum = 0;
if (n > 1)
{
for (int i = 1; i < n / 2 + 1; i++)
{
if (n % i == 0)
{
sum += i;
}
}
if (n == sum)
{
isPerfect = 1;
}
}
return isPerfect;
}


int main()
{
int n, m;
scanf("%d %d", &n, &m);

int cnt = 0;
for (int i = n; i <= m; i++)
{
if (isPerfect(i))
{
if (cnt > 0)
{
printf(" ");
}
printf("%d", i);
cnt ++;
}
}
if (cnt == 0)
{
printf("NIL\n");
}

return 0;
}

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def isPerfect(n):
numbersum = 0
check = 0

if n > 1:
for i in range(1, int(n / 2 + 1)):
if n % i == 0:
numbersum += i
if n == numbersum:
check = 1

return check


def main():
s = input()
lst = s.split()
n = int(lst[0])
m = int(lst[1])
perfect_list = []

for i in range(n, m + 1):
if isPerfect(i):
perfect_list.append(str(i))

if perfect_list:
print('NIL\n')
else:
print(' '.join(perfect_list))


main()