求40億以內的水仙花數(python)
阿新 • • 發佈:2018-12-19
當前驗證的數為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) # 程式執行時間
運行了一個小時四十五分鐘。。。。
有建議可以說一下,萬分感謝