题目描述
令P[i](i=0,1,2,...) 表示第i个质数。给出两个正整数M和N(1 <= M <= N <= 5*10^5)。你来输出从P[M] 到P[N]的所有质数。
输入
输入包括多组测试用例,至EOF结束。每组测试用例为一行,给出了两个整数M和N。
输出
每组测试用例对应一组输出:从P[M]到P[N]的所有质数。每10个整数输出为一行,并且行尾没有空格。每两组测试用例的输出之间应有一个空行。
样例输入
5 27
样例输出
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103
提示
P[500000]=7368787
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
static int p[8000000],su[500000];
void set(void) //函数set既不需要参数,也不会返回数据
{
int i1, i2, i, j=1;
for(i1=2;i1<=7368787;i1++)
{
if(p[i1]!=0)
continue ;
for(i2=i1+i1;i2<=7368787;i2+=i1)
{
p[i2]++;
}
}
for(i=2;i<=7368787;i++)
{
if(p[i]==0)
{
su[j]=i;
j++;
}
}
}
int main()
{
int m, n;
int i, t=0, temp;
set();
while(scanf("%d %d", &m, &n)!=EOF)
{
t=0;
for(i=m;i<=n;i++)
{
if(t%10==0&&t!=0)
printf("\n");
if((i-m+1)%10==1)
{
printf("%d",su[i]);
t++;
}
else
{
printf(" %d",su[i]);
t++;
}
}
printf("\n\n");
}
}