hihoCoder有一期专门讲解Eular质数筛法, 传送门
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define MAX 1000010 bool isprime[MAX];//素数 int primelist[MAX];//保存小于等于N所有的素数 int primecout=0;//素数个数 void soo() { for(int i = 2; i <= N; i++) { isprime[i] = true; } for(int i = 2; i <= N; i++) { if(isprime[i]) { primecout++; primelist[primecout] = i; } for(int j = 1; j <= primecout; j++) { if (i * primelist[j] > N) break; isprime[i * primelist[j]] = false; if(i % primelist[j] == 0) break; } } } int main() { cin>>N; memset(primelist,0,sizeof(0)); soo(); cout<<primecout<<endl; // for(int i=1; i<=primecout; i++) // cout<<primelist[i]<<endl; return 0; }
时间: 2024-12-28 23:48:34