您的位置:首页 > 其它

线性筛法筛素数

2016-08-01 09:57 141 查看
//
//  main.cpp
//  Richard
//
//  Created by 邵金杰 on 16/8/1.
//  Copyright © 2016年 邵金杰. All rights reserved.
//

#include<iostream>
using namespace std;
const int maxn=200000;
int primes[maxn],is_prime[maxn];
int main()
{
int m,pi=0;
cin>>m;
memset(is_prime,1,sizeof(is_prime));
for(int i=2;i<=m;i++)
{
if(is_prime[i]) primes[pi++]=i;
for(int j=0;j<pi&&i*primes[j]<=m;j++)
{
is_prime[i*primes[j]]=0;
if(i%primes[j]==0) break;
}
}
for(int i=0;i<pi;i++)
{
if(i%10==0) printf("\n");
printf("%3d",primes[i]);
}
printf("\n");
return 0;
}
这样做的好处是,某一个数,让i最大时来把它筛掉,那样的话不会重复筛去,因为,随着i的增大,即使乘primes中最小的,也会大于这个数,所以不回重复
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: