用Python输出完数

输入一个整数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”。引号不必输出。具体输出格式参考输出样例。

img

img


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)。程序将依次输出每组数据的结果。

希望这个程序能够帮助到你!如果你有任何其他问题,请随时提问。