1. 程式人生 > >1007. 素數對猜想 解決python超時問題

1007. 素數對猜想 解決python超時問題

此題如果採用素數的定義來判別,將會超時,因此採用素數篩選法

核心思想:素數的倍數一定不是素數 偶數一定不是素數

從2開始依次往後面數,如果當前數字一個素數,那麼就將所有其倍數的數從表中刪除或者標記,然後最終得到所有的素數。

詳細的解釋可以看一下這位大大的博文

本文主要採用一種寫法上簡單的方式,效率上在1000以內差不多

def easyprm(N):
    a = [0] * (N + 1)                                #初始化認為所有均為素數
    a[0] = a[1] = 1
    for i in range(2, N // 2 + 1):                    #查詢所有素數的倍數
        for j in range(2, N // i + 1):
            a[i * j] = 1
    res=[2]
    for i in range(3,N+1,2):                 #只尋找奇數
        if a[i]==0:
            res.append(i)
    return res
N=int(input())
A=easyprm(N)
sum=0
for i in range(len(A)-1):
    if A[i+1]-A[i]==2:
        sum+=1
print(sum)