PAT乙级题库- 数素数

题目描述

令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;
}

在这里插入图片描述

发布了35 篇原创文章 · 获赞 2 · 访问量 916

猜你喜欢

转载自blog.csdn.net/qq_45735810/article/details/103230658
今日推荐