#include <iostream> #include <algorithm> using namespace std; const int N= 1000010; int primes[N], cnt; bool st[N]; void get_primes(int n) { //n只会被最小质因子筛掉 for (int i = 2; i <= n; i ++ ) { if (!st[i])//如果是质数 primes[cnt ++ ] = i; for (int j = 0; primes[j] <= n / i; j ++ ) {//从小到大枚举的质数 st[primes[j] * i] = true;//每一次把当前质数和i的乘积筛掉 //当i%pj==0 pj一定是i的最小质因子,pj一定是pj*i的最小质因子 //当i%pj!=0,pj一定小于i的所有质因子,pj也一定是pj*i 的最小质因子 if (i % primes[j] == 0)//primes[j]是n的最小质因子 break; } } } int main() { int n; cin >> n; get_primes(n); cout << cnt << endl; return 0; }
AcWing 868. 筛质数 线性筛法
猜你喜欢
转载自www.cnblogs.com/QingyuYYYYY/p/11854463.html
今日推荐
周排行