核心思想:从i=2开始,划去i的倍数,即剩下i为质数(如删去2的倍数后2为质数,再删去3的倍数后3为质数,4被删除则跳过,5未被删除则记录然后删除5的倍数。。。以此类推)
#include <bits/stdc++.h> using namespace std; #define max_n 1000000 int prime[max_n]={0}; bool is_prime[max_n]; int sieve/*埃氏筛选*/(int n) { int p=0; memset(is_prime,1,sizeof(is_prime)); for(int i=2;i<=n;i++) { if(is_prime[i]) { prime[p]=i; p++; for(int j=i*2;j<=n;j+=i) { is_prime[j]=0; } } } return p; } int main() { int n; cin>>n; int p=sieve(n); for(int i=0;i<p;i++) { cout<<prime[i]<<" "; } }
原文:https://www.cnblogs.com/rtyxxy/p/12075049.html