1007. 素數對猜想 解決python超時問題
阿新 • • 發佈:2019-01-07
此題如果採用素數的定義來判別,將會超時,因此採用素數篩選法
核心思想:素數的倍數一定不是素數 偶數一定不是素數
從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)