素数是仅能被它本身和1整除的任何整数。埃拉托斯特尼筛法,简称埃氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。算法思想:给出要筛数值的范围,找出其以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数3去筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......,如图所示。
编写一个程序,输出区间[m, n]之间的所有素数。
输入格式:
输入的第一行是一个整数t,表示t次查询。 后面的t行中,每行2个整数m和n。
输入保证 2 <= m <= n <= 1000000。
输出格式:
对每一行m和n,把区间[m, n]之间的所有素数输出到一行。每个数之后跟一个空格。若区间内无素数,输出-1。
输入样例:
在这里给出一组输入。例如:
3
2 20
10 40
20 100
输出样例:
在这里给出相应的输出。例如:
2 3 5 7 11 13 17 19
11 13 17 19 23 29 31 37
23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
代码如下:
#include <stdio.h>
int main()
{
int a[1000000],m,n,i,j,s,k=0;
scanf("%d",&s);
while(k!=s){
scanf("%d %d",&m,&n);
for(i=1;i<=n;i++){
a[i]=i;
}
for(i=2;i<=n;i++){
for(j=2;i*j<=n;j++){
a[i*j]=0;
}
}
for(i=m;i<=n;i++){
if(a[i]!=0)printf("%d ",a[i]);
}
printf("\n");
k++;
}
return 0;
}