Python项目Euler#21

2024-03-28 13:29:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这个具体的项目任务有点麻烦,尽管(对我来说)它看起来应该有用,但我还是不能得到正确的答案。对迭代范围的调整似乎没有帮助。你知道吗

我理解了寻找适当除数的过程,并编写了代码,用这个过程来寻找合适的数。以前,当我在站点示例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)

Tags: 代码innumberforif过程rangeval
1条回答
网友
1楼 · 发布于 2024-03-28 13:29:06

友好数是两个不同的数,它们之间有着密切的联系,每一个的固有因子之和等于另一个数。所以,这些数字是成对的。你知道吗

一个相关的概念是一个完美数,它是一个等于自身固有因子之和的数。您的代码不区分这两者。你知道吗

这意味着您必须将条件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))

相关问题 更多 >