1. 程式人生 > >Python練習(15)-中

Python練習(15)-中

問題描述

等差素數數列
類似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,急於下手,分析的不夠透徹。每一個程式都是基於對題意的理解,要對題目背後的意義進行思考和挖掘,再動手寫。