求出範圍內所有的素數

求出範圍內所有素數

Description

給出整數a,b,求出區間[a,b]內的所有素數。

Input

有多組測試數據。輸入的第一行是整數T(0<T<=1000),表示測試數據的組數。每一組測試數據只有一行,分別爲整數a和b,兩數之間有一個空格。該行沒有其它多餘的符號。0<a<b<2^16。

Output

對應每組輸入,輸出一行[a,b]區間內所有的素數,每個數後應有一個空格,如果[a,b]區間內沒有素數,則該行爲空行。該行不能有其它多餘的符號。

Sample Input

2
1 100
50 100

Sample Output

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
53 59 61 67 71 73 79 83 89 97

Hint

可以考慮篩法求素數。

Source  






#include <cstdio>
 #include <cstring>
 
 const int max_n = 70000;
 
 int main()
 {
 	int flag[max_n];
 	memset(flag, 0, sizeof(flag));
 	flag[1] = 1;
 	int start = 2;
 	while ( start * start < max_n )
 	{
 		for ( int i = start; i < max_n; ++i )
 		{
 			if ( !flag[i] )
 			{
 				start = i;
 				break;
 			}
 		}
 		for ( int i = start * start; i < max_n; i += start )
 		{
 			flag[i] = 1;
 		}
 		start++;
 	}
 
 	int t, a, b;
 	scanf("%d", &t);
 	while ( t-- )
 	{
 		scanf("%d %d", &a, &b);
 		for ( int i = a; i <= b; ++i )
 		{
 			if ( !flag[i] )
 			{
 				printf("%d ", i);
 			}
 		}
 		printf("\n");
 	}
 	return 0;
 }
 

此題爲UESTC 1246,水題,素數篩選法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章