時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:3 描述
寫乙個程式,找出給出素數範圍內的所有孿生素數的組數。一般來說,孿生素數就是指兩個素數距離為2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程式,不仔細看題,咱們為了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相鄰為1的也成為孿生素數。
輸入第一行給出n(0輸出
每組測試資料輸出佔一行,該行為m範圍內所有孿生素陣列數。
樣例輸入
114
樣例輸出
4
大概看了一下該題的執行結果,沒有通過的主要是因為超時。優化一下就可以了,打個**記錄一下,就可以解決這個問題了。
(1)把所有輸入資料儲存起來,並且記錄最大的輸入資料。
(2)根據最大值生成素數表,和孿生表(生成素數最大不超過最大輸入資料)
素數表su[78500]=
孿生表pr[78500]=
利用前面的素數表求後面的素數,加快求素數效率。每求出來乙個素數,要和之前求出的素數求差,如果差小於2,孿生表的值等於前乙個的值加一,否則等於前乙個值。
假設求出了第i個素數s
su[i]=s,pr[i]=su[i]-su[i-1]<=2 ? pr[i-1]+1:pr[i-1];
(3)
打好表之後,把儲存好的資料乙個乙個的處理,假設第乙個資料是 16
採用二分查詢從素數表中定位不大於16的最大素數的位置5,該位置對應的素數是13,輸出pr[5]即可。
**如下:
01.
//孿生素數問題
02.
#include
03.
int
su[78500]=;
04.
bool
sushu(
int
a) //根據前面的素數快速判斷當前數是否是素數
05.
11.
int
main()
12.
;
14.
int
i,j=5,k,n,m,p,q,max=0;
15.
scanf
(
"%d"
,&n);
16.
for
(i=0;i
17.
21.
for
(i=13;i
22.if
(sushu(i))
23.
29.
for
(i=0;i
30.
39.
if
(su[q]<=test[i])p=q;
40.
printf
(
"%d\n"
,pr[p]);
41.
}
42.
}
NYoj 26 孿生素數問題
孿生素數問題 時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 寫乙個程式,找出給出素數範圍內的所有孿生素數的組數。一般來說,孿生素數就是指兩個素數距離為2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程式,不仔細看題,咱們為了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相...
nyoj26 孿生素數問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 寫乙個程式,找出給出素數範圍內的所有孿生素數的組數。一般來說,孿生素數就是指兩個素數距離為2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程式,不仔細看題,咱們為了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相鄰為1的也成為...
nyoj 26孿生素數問題
孿生素數問題 時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 寫乙個程式,找出給出素數範圍內的所有孿生素數的組數。一般來說,孿生素數就是指兩個素數距離為2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程式,不仔細看題,咱們為了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相...