Python 完美数字搜索
Python Perfect Number Search
所以我想编写一个可以找到完美数字的程序。我做了一个草稿,但它打印了不相关的数字。请告诉我如何修复此程序。
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)
你每次都有干净的 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)
完全数就是一个数等于它的质因数之和,不包括它自己。
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
我相信这是人们建议你做的:
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)
请注意,此方法不会让您得到比前四个完全数更多的结果。在那之后,在合理的时间内找到下一个就太慢了。如果你想找到更多的它们,你需要使用高效的梅森素数搜索并计算每个梅森素数的伴完美数。
所以我想编写一个可以找到完美数字的程序。我做了一个草稿,但它打印了不相关的数字。请告诉我如何修复此程序。
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)
你每次都有干净的 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)
完全数就是一个数等于它的质因数之和,不包括它自己。
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
我相信这是人们建议你做的:
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)
请注意,此方法不会让您得到比前四个完全数更多的结果。在那之后,在合理的时间内找到下一个就太慢了。如果你想找到更多的它们,你需要使用高效的梅森素数搜索并计算每个梅森素数的伴完美数。