2

所以我想编写一个找到完美数字的程序。我做了一个草稿,但是它打印了不相关的数字。请让我知道如何修复此程序。

f = []

p = []

for i in range(2, 100):
    for k in range(1, i):
        if i % k == 0:
            f.append(k)
    if sum(f) == i:
        p.append(i)

print(p)
4

3 回答 3

1

我相信这是人们建议你做的:

perfect = []

for candidate in range(2, 10000):
    factors = []

    for number in range(1, 1 + candidate // 2):
        if candidate % number == 0:
            factors.append(number)

    if sum(factors) == candidate:
        perfect.append(candidate)

print(perfect)

请注意,这种方法不会得到比前四个完美数字更多的信息。在那之后,在合理的时间内找到下一个太慢了。如果你想找到更多,你需要使用高效的梅森素数搜索并计算每个梅森素数的伴生完美数。

于 2018-08-17T06:39:47.347 回答
0

您每次都有 clean f 并且不包括最后一个数字。

p = []

for i in range(2, 500):
    f = [] #clean f
    for k in range(1, i): 
        if i % k == 0:
            f.append(k)
    if sum(f) == i:
        p.append(i)

print(p)
于 2018-08-16T02:24:29.100 回答
0

完美数只是一个等于其素因数之和的数字,不包括它自己。

def perfect(num):
    prime_factors=[1] #since 1 is a prime factor of each number, add it
    for i in range(2,num):
        if num%i==0:
            #i is the numbers prime factor
            prime_factors.append(i)

    if sum(prime_factors)==num:
        return True #the sum of its prime factors equals the numbers so the number is perfect number

    return False

检查结果:

print(perfect(70)) factors: [1 +2+ 5+ 7+ 10+14+35]!=70 so False
print(perfect(28)) factors: [1+2+4+7+14]==28 so True
于 2018-08-16T02:42:30.747 回答