PAT 素數對猜想 (Python)
讓我們定義 dn 為:dn = pn+1 - pn,其中 pi 是第i個素數。顯然有 d1=1 且對於n>1有 dn 是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。
現給定任意正整數N (< 105),請計算不超過N的滿足猜想的素數對的個數。
輸入格式:每個測試輸入包含1個測試用例,給出正整數N。
輸出格式:每個測試用例的輸出佔一行,不超過N的滿足猜想的素數對的個數。
輸入樣例:20輸出樣例:
4
Analysis:
1和0不是素數也不是合數,每個大於1的正整數都可以寫成素數的乘積
- 一般方法,整除2~sqrt(n) O(n*sqrt(n)),(m*n=p,m,n=mid或者m,n之中必定有一個值是小於mid的)
- 埃氏素數篩選,選取第一個未被處理的數,然後判斷是否是素數(m<sqrt(n)),如果是儲存,並將該數和能被該數整除的元素去掉,O(nloglogn),空間複雜度是O(n)
小於n的素數倒數和是loglogn
- 無重複篩選,線性篩選,O(n)
如果x與n互質,那麼n-x也與n互質
http://blog.csdn.net/zmazon/article/details/8290774
http://blog.csdn.net/nk_test/article/details/46242311
http://bbs.csdn.net/topics/340202337
http://wenku.baidu.com/link?url=KgTW4k4JLM5RfBy-n0MFdMJhhIRUXPzOP3Wo2rgIMjpDf5N0YKiEtQWjUDzysHoUBPC3vd0V7m9AQdxC01dTAqVWYHeHVtmqOFiUGpNl_e7
http://www.bubuko.com/infodetail-837565.html
Solution:import math def isPrime(n): m=int(math.sqrt(n)) for i in range(2,m+1): if n%i==0: return False return True def getPairNum(N): pnum,ls,tmp=0,[],0 for i in range(2,N+1): if isPrime(i): ls.append(i) tmp+=1 if tmp>1 and ls[tmp-1]-ls[tmp-2]==2: pnum+=1 print pnum input=int(raw_input()) getPairNum(input)