标签:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 8 int prime[1000000]; 9 int vis[1000000]; 10 int normal_sieve(int n) 11 { 12 memset(vis,0,sizeof(vis)); 13 int cnt=0; 14 int tmp=(int)sqrt(1.0*n); 15 for(int i=2;i<=tmp;i++) 16 { 17 if(!vis[i]) 18 { 19 prime[cnt++]=i; 20 for(int j=i;j<=n;j+=i) 21 vis[j]=1; 22 } 23 } 24 for(int i=tmp;i<=n;i++) 25 if(!vis[i]) 26 prime[cnt++]=i; 27 return cnt; 28 } 29 //欧拉素数筛; 30 int Find_prime(int N) 31 { 32 int cnt=0; 33 memset(vis,0,sizeof(vis)); 34 for(int i=2;i<=N;i++) 35 { 36 if(!vis[i]) 37 prime[cnt++]=i; 38 for(int j=0;j<cnt;j++) 39 { 40 if(i*prime[j]>N) 41 break; 42 vis[i*prime[j]]=1; 43 if(i%prime[j]==0) 44 break; 45 } 46 } 47 return cnt; 48 } 49 int main() 50 { 51 int n; 52 while(scanf("%d",&n)!=EOF && n) 53 { 54 int cnt=Find_prime(n); 55 for(int i=0;i<cnt;i++) 56 printf("%d ",prime[i]); 57 printf("\n"); 58 59 } 60 return 0; 61 }
标签:
原文地址:http://www.cnblogs.com/by-1075324834/p/5006018.html