寻找n以内的所有的素数,埃氏筛的实现原理如下:
如果发现一个素数,就将其倍数全都删去,那么数组中下一个未被删去的数一定是素数(也是数组中最小的那个数),反复执行,最后得到素数表。
复杂度为O(nloglogn),接近线性。
//
// 119_prime.cpp
// changlle
//
// Created by user on 1/4/16.
// Copyright (c) 2016 user. All rights reserved.
//
#include <iostream>
using namespace std;
const int inf=100;
int prime_array[inf];
bool is_prime[inf+1];
int sieve (int n) {
int p=0;
for (int i=0;i<=n;i++) is_prime[i]=true;
is_prime[0]=false;
is_prime[1]=false;
for (int i=2;i<=n;i++)
{
if (is_prime[i]) {
prime_array[p++]=i;
//cout<<i<<endl;
for (int m=2;m*i<=n;m++)
is_prime[m*i]=false;
}
}
return p;
}
int main() {
int num=sieve(11);
cout<<num<<endl;
return 0;
}