当前验证的数为i
位数为D
每位上值的D次幂之和为sum
import time
start=time.clock() # 计时开始
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 0-9的D次幂数组缓存表
sign = 1 # 标记,判断是否现需要重写缓存表
sum1 = 1 # 上一个数的sum值
print(1, end=" ")
for i in range(2, 4000000001):
str1 = str(i)
D = len(str1)
if D != sign: # 若位数不同于上一个数,重写缓存表
sign = D # 重写标记
list1 = []
for x in range(10):
list1.append(x**D)
sum = 0 # 重置sum
if int(str1[D-1]) != 0: # 若最后一位数不是0
sum = sum1+list1[int(str1[D-1])]-list1[int(str1[D-1])-1] # 则sum等于sum1加上最后一位数的D次幂减去最后一位数减一的D次幂
else:
for n in range(D): # 将要计算从左到右第n+1个数的D次幂
# sum += int(str1[n])**D
sum += list1[int(str1[n])] # int(str1[n])为从左到右第n+1个数的值
sum1 = sum # 新值变旧值
if sum == i:
print(i, end=" ")
end=time.clock() # 计时结束
print()
print("final is in ", end-start) # 程序运行时间
运行了一个小时四十五分钟。。。。
有建议可以说一下,万分感谢