讓我們定義d
nd_n
dn為:dn=
pn+1
−p
nd_n=p_-p_n
dn=pn
+1−
pn ,其中p
ip_i
pi 是第i個素數。顯然有d1=
1d_1=1
d1=
1,且對於n>1有d
nd_n
dn 是偶數。「素數對猜想」認為「存在無窮多對相鄰且差為2的素數」。
現給定任意正整數n(n
<10
5n<10^5
n<10
5),請計算不超過n的滿足猜想的素數對的個數。
輸入格式:輸入在一行給出正整數n。
輸出格式:輸入樣例:在一行中輸出不超過n的滿足猜想的素數對的個數。
20
輸出樣例:
4
題解
這題主要考察兩點,質數的判斷和獲取。
對於乙個數n如果進行0~n的遍歷判斷要花費的時間時n個單位
顯然有些慢,為了減少判斷時間,可以從「n如果不是素數,則可以表示為兩數的乘積」入手。
例如:倘若對乙個數:15
進行檢測,按照傳統方式,依次檢驗是否能被整除
15/2=7.515/3=515/4=3.7515/5=315/6=2.5 15/7=2.1 15/8=1.87 …
通過上述舉例也能明顯看出驗證3和5其實重複驗證了兩次,只需要驗證一半,所以對n開平方向下取整嚴,驗證到這裡就行了。
(至於為什麼時開方,是因為兩數是乘積運算,倘若相加則為除法。)
對乙個數從0
00 ~ n
\sqrt n
n的整數進行驗證,遍歷看有無餘數為0的項,如果有說明是不是素數。
這個題做法是先打表,陣列記錄所有素數,然後按照輸入值進行查表,檢查所有不超過輸入值的臨近素數對的差值是否為2,是則進行計數,最後輸出計數結果即可。
ac例程
#include
#include
#include
using
namespace std;
bool
judge
(int n)
intmain()
1007 素數對猜想 (20 分)
讓我們定義d n 為 d n p n 1 p n 其中p i 是第i個素數。顯然有d 1 1,且對於n 1有d n 是偶數。素數對猜想 認為 存在無窮多對相鄰且差為2的素數 現給定任意正整數n 10 5 請計算不超過n的滿足猜想的素數對的個數。輸入在一行給出正整數n。在一行中輸出不超過n的滿足猜想的...
1007 素數對猜想 (20 分)
讓我們定義d n 為 d n p n 1 p n 其中p i 是第i個素數。顯然有d 1 1,且對於n 1有d n 是偶數。素數對猜想 認為 存在無窮多對相鄰且差為2的素數 現給定任意正整數n 10 5 請計算不超過n的滿足猜想的素數對的個數。輸入在一行給出正整數n。在一行中輸出不超過n的滿足猜想的...
1007 素數對猜想 (20 分)
1007 素數對猜想 20 分 讓我們定義dn pn 1 p nd n p p n dn pn 1 pn 其中p ip i pi 是第i個素數。顯然有d1 1d 1 1 d1 1,且對於n 1有d n d n d n 是偶數。素數對猜想 認為 存在無窮多對相鄰且差為2的素數 現給定任意正整數n 10...