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 }