题目描述
令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"); } }