苦逼的周大爷

博客园 首页 联系 订阅 管理

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

 

可以考虑筛法求素数。

 

解答:

 1 #include <stdio.h> 
 2 int i,j,t,k; 
 3 int a[65535]={0}; 
 4 int b[1001],c[1001]; 
 5 int main() 
 6 { 
 7 
 8     scanf("%d",&t);
 9     for (i=0;i<t;i++) scanf("%d %d",&b[i],&c[i]);
10     for (k=0;k<t;k++)
11     {
12     if (b[k]==1) b[k]=2;
13     for(i=b[k]; i<=c[k]; i++) //因为0 1不是素数,所以跳过 
14     { 
15          a[i]=1;    
16     } 
17  
18     for(i=b[k]; i<=c[k]; i++) 
19     { 
20         if(a[i]==1) 
21         { 
22            printf("%d ", i); 
23            for(j=b[k]; j<=c[k]; j+=i) 
24            { 
25                if(j%i==0) a[j]=0; 
26            } 
27         } 
28     }
29     printf("\n");
30     }
31     return 0; 
32 } 

 

posted on 2013-10-17 21:47  苦逼的周大爷  阅读(688)  评论(0编辑  收藏  举报