Python練習(15)-中
阿新 • • 發佈:2018-11-11
問題描述
等差素數數列
類似7、37、67、97、107、137、167、197,這樣由素陣列成的數列叫做等差素數數列。素數數列具有項數的限制,一般指素數數列的項數有多少個連續項,最多可以存在多少個連續項。
程式設計找出100以內的等差素數數列。
分析:
先構造素數判斷函式,並找出100以內所有素數;
遍歷所有素數ai,再內迴圈找到接線來的素數aj,判斷ak=2aj-ai 是否是素數
若是,則再判斷ak加上等差是否仍是素數,依此迴圈
用列表儲存符合條件的等差序列,並輸出
程式碼
#構造素數判斷函式 import math def sushu(n): for k in range(2,int(math.sqrt(n)+1)): if n%k==0: return False return True #將100以內的素數放入列表 Sushu=[] for i in range(2,100): if sushu(i): Sushu.append(i) print len(Sushu) # for i in range(len(Sushu)-2): #遍歷列表,以 ai 作為等差數列的首項 for j in range(i+1,len(Sushu)): #以aj 作為中間項 a3=2*Sushu[j]-Sushu[i] #求出第三項 s=[Sushu[i],Sushu[j]] while a3<100 and sushu(a3): #若滿足條件 s.append(a3) a3+=Sushu[j]-Sushu[i] #則繼續判斷下一項 if len(s)>2: # s長度大於2是數列輸出的條件 print s #結果 [3, 5, 7] [3, 7, 11] [3, 11, 19] [3, 13, 23] [3, 17, 31] [3, 23, 43] [3, 31, 59] [3, 37, 71] [3, 41, 79] ....
總結:
*
以上程式碼是借鑑了其他人的,自己開始想的時候,思緒混亂,還想著要不要從1. 2 3 …這樣慢慢加上去,忘記了等差數列的性質:a3=2*a2-a1,急於下手,分析的不夠透徹。每一個程式都是基於對題意的理解,要對題目背後的意義進行思考和挖掘,再動手寫。