Python Project Euler#21

问题描述 投票:-2回答:1

所以我在进行这个特定的项目欧拉分配时遇到了一些麻烦,尽管(对我来说)似乎可以正常工作,但我无法找到正确的答案,并且对迭代范围进行了一些微调似乎没有帮助。我了解找到适当除数的过程,并编写了使用该过程查找友好数字的代码。当我在站点示例220中使用原始编号时,该代码有效。'''

def amicable_number(x):
    amic_range = range(1, x)
    amicable_numbers = []

    for num in amic_range:

        x_val = 0
        y_val = 0
        first_iter_list = range(1, num)
        for val in first_iter_list:
            if (num%val)==0:
                x_val+=val

        for val in range(1, x_val):
            if (x_val%val)==0:
                y_val+=val

        if y_val==num:
            amicable_numbers.append(y_val)

    result = sum(amicable_numbers)

    return result

amicable_num_result = amicable_number(10000)

'''

python debugging
1个回答
0
投票

可亲和的数字两个不同的数字如此相关,以使每个的适当除数的总和等于另一个数字。因此,这些数字成对出现。

一个相关的概念是perfect number的概念,它是一个等于其自身适当除数之和的数字。您的代码无法区分两者。

这意味着您必须在代码中添加条件x_val != y_val

以下是固定代码以及一些外观上的更改。

def sum_amicable_numbers(x):
    # Use set instead
    amicable_numbers = set()

    # No point assigning the range to a variable
    for num in range(1, x):
        x_val = 0
        y_val = 0

        # No point assigning the range to a variable
        for val in range(1, num):
            if (num % val) == 0:
                x_val += val

        for val in range(1, x_val):
            if (x_val % val) == 0:
                y_val += val

        # Also check if x_val NOT equal to y_val
        if y_val == num and x_val != y_val:
            amicable_numbers.add(y_val)

    return sum(amicable_numbers)


if __name__ == '__main__':
    print(sum_amicable_numbers(10000))

© www.soinside.com 2019 - 2024. All rights reserved.