我正在尝试在python2中的项目euler中解决问题23。我得到的结果是4179935,但正确的答案是4179871
这是实际问题 理想数字是其适当除数之和与该数字完全相等的数字。例如, 适当的除数28的总和就是1 + 2 + 4 + 7 + 14 = 28,这意味着28是一个完美的数。
如果数字n的适当除数之和小于n,则称n为不足;如果数字n的适当除数超过n,则称其为丰富。
因为12是最小的整数,所以1 + 2 + 3 + 4 + 6 = 16,最小的数字可以写为 两个丰富的数字是24。通过数学分析,可以证明所有大于28123的整数都可以是 写为两个丰富数字的总和。但是,无法通过分析进一步降低此上限 即使已知无法表示为两个丰富数字之和的最大数字小于此限制。
找到所有不能写为两个丰富数字之和的正整数之和。
import itertools
def find_non_abundant_sums(num):
non_abundant_number = set()
non_abundant_sums = set()
all_numbers = set(range(1,num+1))
for i in range(1,num+1):
divisor_sum = find_divisor_sum(i)
if(divisor_sum > i):
non_abundant_number.add(i)
for j in itertools.combinations(non_abundant_number,2):
if(j[0]+j[1] < num+1):
non_abundant_sums.add(j[0]+j[1])
print (sorted(non_abundant_sums))
return sum(all_numbers-non_abundant_sums)
def find_divisor_sum(num):
divisors = set()
for i in range(1,num):
if(num%i==0):
divisors.add(i)
return sum(divisors)
print (find_non_abundant_sums(28123))
预期:4177981 实际:4179935