1007 素數對猜想 20 分

2021-10-21 02:00:50 字數 1281 閱讀 6719

讓我們定義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...