讓我們定義dn為:dn=pn+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...