令人惊讶的是,只有三个数字可以写成数字的四次幂的总和:
1634 = 1^4 + 6^4 + 3^4 + 4^4 8208 = 8^4 + 2^4 + 0^4 + 8^4 9474 = 9^4 + 4^4 + 7^4 + 4^4
由于1 = 1 ^ 4不是总和,因此不包括在内。
这些数字的总和是1634 + 8208 + 9474 = 19316。
找到所有可写入的数字之和,作为其数字的五次幂之和。
这是我的代码:
summ = 0
digit_sum = 0
i = 0
while i < 1000000:
j = list(str(i))
for x in j:
digit = int(x) ** 5
digit_sum += digit
if digit_sum == i:
summ += i
print(i)
else:
digit_sum = 0
i += 1
print(summ)
任何人都可以找出为什么我错过了值4151应该是正确答案之一?
您的代码中的问题是您在得到答案时忘记重置digit_sum
。把digit_sum = 0
放在j = list(str(i))
之前。你也可以从i = 0
开始。我建议从i = 10
开始,因为前2位数字是10。
用这个:
[i for i in range(10, 1000000) if i == sum(int(d) ** 5 for d in str(i))]
相当于:
[4150, 4151, 54748, 92727, 93084, 194979]
使用总和:
sum(i for i in range(10, 1000000) if i == sum(int(d) ** 5 for d in str(i)))
相当于:
443839
4150也在解决方案中。在4151步之前,digit_sum未设置为0。您应该在每个步骤中设置digit_sum = 0。
summ = 0
i = 10
while i < 1000000:
digit_sum = 0
j = list(str(i))
for x in j:
digit = int(x) ** 5
digit_sum += digit
if digit_sum == i:
summ += i
print(i)
i += 1
print(summ)
你的问题的答案是你不会每次都重置digit_sum
,只有当digit_sum != i
。如果删除else
语句,它应该可以正常工作。
if digit_sum == i:
summ += i
print(i)
digit_sum = 0
i += 1