Euler project Prob 23不充裕的金额:python2

时间:2019-05-19 22:01:11

标签: python-2.7

我正在尝试在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

0 个答案:

没有答案