Codeup——590 | 问题 A: 素数(埃氏筛法)

题目描述

输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。

输入

输入有多组数据。
每组一行,输入n。

输出

输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。

样例输入

70

样例输出

11 31 41 61

思路:利用埃氏筛法,在该算法的基础上修改一下就可以了。

#include <iostream>
#include <cstdio>
using namespace std;

const int maxn=10001;
int prime[maxn],pNum=0;
bool p[maxn]={0};

void Find_Prime(int n){	//埃氏筛法
	for(int i=2;i<n;i++)
		if(!p[i]){
			if(i%10==1)	//满足条件时才存入数组中
				prime[pNum++]=i;
			for(int j=i+i;j<n;j+=i)
				p[j]=true;
		}
}

int main()
{
	int n;
	while(scanf("%d",&n)!=EOF){
		pNum=0;
		Find_Prime(n);
		if(pNum==0){
			printf("-1\n");
			continue;
		}
		printf("%d",prime[0]);
		for(int i=1;i<pNum;i++)
			printf(" %d",prime[i]);
		printf("\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44888152/article/details/106891137