题目描述
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。
输入描述:
输入在一行中给出M和N,其间以空格分隔。
输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入例子:
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
思路(算法笔记)
用筛法可使时间复杂度降到o(nloglogn)
#include <cstdio>
const int maxn = 1000001;
int prime[maxn],pnum=0;
bool pass[maxn]={0}; //i是素数 则pass[i]为false
void findprime(int n)
{
for(int i=2; i<maxn; i++)
{
if(!pass[i])
{
prime[pnum++]=i;
if(pnum>=n) break; //只需要n个素数
for(int j=i+i; j<maxn; j+=i)
pass[j]=1;
}
}
}
int main()
{
int min,max;
scanf("%d %d",&min,&max);
findprime(max);
for(int i=min-1,j=1; i<max; i++,j++)
{
printf("%d",prime[i]);
if(j%10!=0 && i<max-1) printf(" ");
else printf("\n");
}
return 0;
}