欧拉(Euler)筛法是用于找到从1 11开始,到给定的最大数之间的所有质数的一种筛法,其时间复杂度是O ( n ) O(n)O(n)。其中欧拉筛法有效地避免了埃拉托斯特尼(Eratosthenes)筛法中重复的筛选,保证了每个数只筛选一次,成功地降低了时间复杂度。
算法思想:
列出从2-n的所有数,将没有标记的数存入另一个数组中。并从2开始给i赋值。每存一个没有标记的数,就用没有标记的数与i相乘,将结果标记并保证每一个结果都是它最小的素数。
最后输出。
代码实现:
#include<iostream>
using namespace std;
int main(){
int a[100005]={0},pri[10005];
int i,j,num;
num=0;
for(i=2;i<=100000;i++){
if(a[i]==0){
num++;
pri[num]=i;
}
for(j=1;j<=num;j++){
if(i*pri[j]>100000){
break;
}
a[i*pri[j]]=1;
if(i%pri[j]==0){
break;
}
}
}
for(i=1;i<=num;i++){
cout<<pri[i]<<endl;
}
return 0;
}