输入一个整数n,要求输出[1,n]范围内的所有完数。完数是一个正整数,该数恰好等于其所有不同真因子之和。例如,6、28是完数,因为6=1+2+3,28=1+2+4+7+14;而24不是完数,因为24≠1+2+3+4+6+8+12=36。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据输入一个整数n(1≤n≤10000)。
输出格式:
对于每组测试,首先输出n和一个冒号“:”;然后输出所有不大于n的完数(每个数据之前留一个空格);若[1,n]范围内不存在完数,则输出“NULL”。引号不必输出。具体输出格式参考输出样例。
num = int(input())
for i in range(1,num):
list = []
for j in range(1,i):
if i % j == 0:
list.append(j)
sum_list = sum(list)
if sum_list == i:
print(i)
以下是使用 Python 编写的程序,用于输出指定范围内的所有完数:
def find_perfect_numbers(n):
perfect_numbers = []
for num in range(1, n + 1):
factors = []
for i in range(1, num):
if num % i == 0:
factors.append(i)
if sum(factors) == num:
perfect_numbers.append(num)
return perfect_numbers
# 读取输入数据并输出结果
while True:
try:
n = int(input())
perfect_numbers = find_perfect_numbers(n)
if len(perfect_numbers) > 0:
print(n, end=": ")
print(*perfect_numbers, sep=" ")
else:
print(n, end=": NULL")
except EOFError:
break
这段代码中的 find_perfect_numbers
函数用于找到给定范围内的所有完数。它遍历从 1 到 n 的每个数,计算它的真因子并将其相加。如果和等于该数本身,则将其添加到完数列表中。
主程序部分使用一个无限循环来读取输入数据,并调用 find_perfect_numbers
函数进行计算。如果存在完数,则按照要求输出结果,否则输出 "NULL"。
你可以将输入数据逐行输入,直到文件结尾(EOF)。程序将依次输出每组数据的结果。
希望这个程序能够帮助到你!如果你有任何其他问题,请随时提问。