所以我在进行这个特定的项目欧拉分配时遇到了一些麻烦,尽管(对我来说)似乎可以正常工作,但我无法找到正确的答案,并且对迭代范围进行了一些微调似乎没有帮助。我了解找到适当除数的过程,并编写了使用该过程查找友好数字的代码。当我在站点示例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)
'''
可亲和的数字是两个不同的数字如此相关,以使每个的适当除数的总和等于另一个数字。因此,这些数字成对出现。
一个相关的概念是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))