1007 素數對猜想 20 分

2021-09-25 07:20:51 字數 1158 閱讀 9356

讓我們定義d​n為:dn=p​n+1−pn,其中pi是第i個素數。顯然有d1=1,且對於n>1有d

​n是偶數。「素數對猜想」認為「存在無窮多對相鄰且差為2的素數」。

現給定任意正整數n(<10^5),請計算不超過n的滿足猜想的素數對的個數。

輸入在一行給出正整數n。

在一行中輸出不超過n的滿足猜想的素數對的個數。

題目意思大致是找出給定n範圍內的相鄰素數差為2的對數,自然而然想到埃氏篩法

埃氏篩法

第一步:就是將2到n裡面的所有整數寫下來,其中最小的數就是2咯。

|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|

第二步:就是將2的倍數都刪去,現在最小的就是3咯

|2|3|5|7|9|11|13|15|17|19|

第三步:然後再將3的倍數刪掉,最小的就是5

|2|3|5|7|11|13|17|19|

以此類推,當表中最小的數字就是m的時候,m就是素數。然後將m的倍數刪去,像這樣反覆操作,就能依次列舉出n以內的素數。

偽**如下:

bool is_prime[maxn]

;int prime[maxn]

;int cnt=0;

for(

int i=

0;i) is_prime[i]

=true

;is_prime[0]

=false

;is_prime[1]

=false

;//0,1不是素數

for(

int i=

2;i)}

這樣,素數就都存於乙個小於給定範圍內的陣列裡面,只要判斷相鄰的素數是否相差為2即可

#include

using

namespace std;

const

int maxn=

100005

;bool is_prime[maxn]

;int prime[maxn]

;int cnt=0;

void

set_prime

(int n)}}

intmain()

cout

}

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...