孿生素數

問題描述:

若兩個素數之差爲2,則這兩個素數就是孿生素數。
編寫程序找出1~100之間的所有孿生素數。


我的代碼:

import math
def prime(n):
    count=0
    for  i in range(2,int(math.sqrt(n))+1):
        if n%i==0:
            count=1
        i+=1
    if count==1:
        return None
    else:
        return True
a=[]
for j in range(2,100):
    if prime(j)==True:
        a.append(j)

for k in range(len(a)-1):
    if a[k]+2==a[k+1]:
        print a[k],a[k+1]


結果:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]


3 5

5 7

11 13

17 19

29 31

41 43

59 61

71 73


我的思路:

先求出100以內的素數,上次已經做過了(http://jmbzs.blog.51cto.com/9449309/1790973),

而且一個素數的孿生素數必然是在其左右的,所以判斷是否滿足a[k]+2==a[k+1]關係,滿足的兩素數即爲孿生素數,注意,此時的循環範圍爲len(a)-1,如果是a[k-1]+2=a[k]的話,那麼for循環就應爲range(1,len(a));


示例代碼:

#篩法找素數: 
# 1. 建立一張表,用True,False標識一個數是否是素數。
# 2. 找到一個素數p,然後把p的倍數都標記成非素數。
# 3. 查表檢測p + 1, 如果非素數檢測下一個, 是素數執行1的操作

pt = [True] * 100
res = []
for p in range(2, 100):
    if not pt[p]: continue
    res.append(p)
    for i in range(p * p, 100, p):
        pt[i] = False
for i in range(1, len(res)):
    if res[i] - res[i-1] == 2:
        print res[i-1], res[i]


題目出處:http://www.cheemoedu.com/exercise/20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章