欧拉筛法的基本思想 :在埃氏筛法的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 #define max 100000 5 6 bool visit[max+20000]; 7 int prime[max]; //要注意保证pirme[]数组足够存储[2,max]之间的素数 8 9 void Getprime() 10 { 11 memset(visit,false,sizeof(visit)); 12 int i,j,num=0; //num统计素数个数 13 for(i=2;i<max;i++) 14 { 15 if(!visit[i]) 16 prime[num++]=i; //纪录素数 17 for(j=0;j<num&&i*prime[j]<=max;j++) 18 { 19 visit[i*prime[j]]=true; // 素数的倍数不是素数 20 if(i%prime[j]==0) //关键 21 break; 22 } 23 } 24 } 25 int main() 26 { 27 Getprime(); 28 for(int i=0;i<100;i++) 29 cout<<prime[i]<<endl; 30 }