孿生素數問題 nyoj

孿生素數問題

時間限制: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;
			}
		}
	}
}        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章