5.4 PAT B1013 数素数 (20分)(打表输出素数)

1013 数素数 (20分)

令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。

输入格式:

输入在一行中给出 M 和 N,其间以空格分隔。

输出格式:

输出从 P​M​​ 到 P​N​​ 的所有素数,每 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

参考代码:

#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
/*bool isprime(int n)
{
	int sqr=(int)sqrt(1.0*n);
	for(int i=2;i<sqr;++i)
	{
		if(n%i==0)
			return false;
	}
	return true;
}*/ //基本判断法 
const int maxn=1000010; 
bool p[maxn];
int pri[maxn];
int pnum=0;
void findprime(int n) //埃氏筛法求素数 
{
	for(int i=2;i<maxn;++i)
	{
		if(p[i]==false)
		{
			pri[pnum++]=i;
			if(pnum>=n) //只要n个素数,超过是即可结束 
				break;
			for(int j=i+i;j<maxn;j+=i)
				p[j]=true;
		}
	}
} 
int main()
{
	int n,m;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		memset(p,0,sizeof(p));
		int count=0;
		findprime(n);
		for(int i=m;i<=n;++i) //输出第m-n的素数 
		{
			count++; 
			printf("%d",pri[i-1]); //下标从0开始 
			if(count%10!=0&&i<n)
				printf(" ");
			else
				printf("\n");
		}
	}
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_43590614/article/details/105096339