【问题标题】:Python Perfect Number SearchPython完美数字搜索
【发布时间】:2018-08-19 09:42:02
【问题描述】:

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

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)

【问题讨论】:

  • 每个i 都需要一个新的f 列表。

标签: python-3.x math perfect-numbers


【解决方案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)

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

【讨论】:

    【解决方案2】:

    你每次都有 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)
    

    【讨论】:

    • 非常感谢!
    • 这不起作用。该问题被标记为 [python-3.x] 但这会在 Python 3 下引发错误。在 Python 2 下,它会打印错误答案 [24] 而不是 [6, 28, 496]
    【解决方案3】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      相关资源
      最近更新 更多