描述
请使用筛选法输出[a, b]之间的所有素数。
输入
输入数据有多组,每组数据占一行,每行2个正整数a和b,其中2<=a<=b<=1000000。
输出
每组数据按从小到大的顺序输出[a, b]中所有的素数,每行最多输出10个素数。每组数据之后空一行。
样例输入
样例输出2 3
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47
31 37 41 43 47
#include <stdio.h>
#define N 1000000
int x[N+1]={0};
int f()
{
int i,n,t;
x[0]=x[1]=1;
n=N/2;
for(i=0;i<n;i++)
{
if(x[i]==0)
{
t=2*i;
while(t<=N)
{
x[t]=i; //I的倍数不是素数
t+=i;
}
}
}
}
int main()
{
f();
int a,b,i;
while(scanf("%d%d",&a,&b)!=EOF)
{
int t=0,flag=0;
for(i=a;i<=b;i++)
{
if(x[i]==0)
{
if(flag)
printf(" ");
printf("%d",i);
t++;
flag=1;
if(t%10==0)
{
flag=0;
printf("\n");
}
}
}
if(t%10!=0)
printf("\n");
printf("\n");
}
return 0;
#define N 1000000
int x[N+1]={0};
int f()
{
int i,n,t;
x[0]=x[1]=1;
n=N/2;
for(i=0;i<n;i++)
{
if(x[i]==0)
{
t=2*i;
while(t<=N)
{
x[t]=i; //I的倍数不是素数
t+=i;
}
}
}
}
int main()
{
f();
int a,b,i;
while(scanf("%d%d",&a,&b)!=EOF)
{
int t=0,flag=0;
for(i=a;i<=b;i++)
{
if(x[i]==0)
{
if(flag)
printf(" ");
printf("%d",i);
t++;
flag=1;
if(t%10==0)
{
flag=0;
printf("\n");
}
}
}
if(t%10!=0)
printf("\n");
printf("\n");
}
return 0;
}