题解 | #素数#

素数

http://www.nowcoder.com/practice/7f4be54b37a04fdaa4ee545819151114

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

//这题练筛法

void Func68(void){
	//整理一下筛法的逻辑:
	//1.被筛掉的必是合数
	//2.任何一个合数可被分解质因数 这意味着 如果所有小于自己的质数都没把自己筛掉 自己就是质数 
	//3.结合1,被筛剩下的数中一定包含当前范围所有质数 
	//所以扫到当前数时,必已在其之前所有质数攻击下存活,其必是质数。 
	int n;
	while(scanf("%d",&n) != EOF){
		if (n<2 || n>10000){
			printf("Error!\n");
			exit(0);
		}
		vector<int> prime;
		bool Isprime[n];
		fill(Isprime,Isprime+n,true);
		for(int i=2; i<n; i++){
			if(!Isprime[i]){
				continue;
			}
			prime.push_back(i);//这里push进去就不用再扫一遍n这么大的数组 
			for(int j=i*i; j<n; j+=i){
				Isprime[j] = false;
			}
		}
		int begin = 0;
		for(int i=0; i<prime.size(); i++){//就看到了用vector的必要性 
			if(prime[i]%10 == 1){
				if(!begin){
					begin = 1;
					printf("%d",prime[i]);
				}else{
					printf(" %d",prime[i]);
				}
			}
		}
	}
}

int main(){
	Func68();
	return 0;
} 
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务