test 6.2 完数(5分)
一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如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语言
#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
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()