//
// 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中最小的,也会大于这个数,所以不回重复
线性筛法筛素数
最新推荐文章于 2023-08-09 21:57:38 发布