孿生素數問題
時間限制:3000 ms | 內存限制:65535 KB
難度:3
-
描述
- 寫一個程序,找出給出素數範圍內的所有孿生素數的組數。一般來說,孿生素數就是指兩個素數距離爲2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程序,不仔細看題,咱們爲了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相鄰爲1的也成爲孿生素數。
-
輸入
- 第一行給出N(0<N<100)表示測試數據組數。
接下來組測試數據給出m,表示找出m之前的所有孿生素數。
(0<m<1000000) -
輸出
- 每組測試數據輸出佔一行,該行爲m範圍內所有孿生素數組數。
-
樣例輸入
-
1
14
-
樣例輸出
-
4
#include <stdio.h>
#define Max_len 1000001
int record[Max_len] = {0};
void prime();
int main (){
int n, i, m, num, sum;
prime();
scanf("%d", &n);
while (n--){
num = 2;
sum = 0;
scanf("%d", &m);
for(i = 3; i <= m; i++){
if(record[i] != 1 && i % 2 != 0){
if(i - num == 1 || i - num == 2){
sum ++;
}
num = i;
}
}
printf("%d\n", sum);
}
return 0;
}
void prime (){
int i, j;
for(i = 3; i <= Max_len / 2; i += 2) {
if(record[i] == 0){
for(j = 3; j * i < Max_len; j ++){
record[i * j] = 1;
}
}
}
}