P3912 素数个数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e8;
bool vis[N];
int p[N / 10],k;
void ola()
{
    for(int i = 2; i <= 1e8; i++)
    {
        if(vis[i] == 0) p[++k] = i; //将素数i加入素数数组p中
        for(int j = 1; j <= k; j++) //扫一遍素数数组里面的k个素数
        {
            int num = i * p[j]; //获取一个由i和p[j]组成的合数
            if(num > 1e8) break;
            vis[num] = 1;
            if(i % p[j] == 0) break; //发现i是p[j]倍数,避免重复标记后面数字,直接break 
        } 
    }
}
int main()
{
    ola(); //ola函数调用完,可以得到一个素数数组p和素数个数k,其中p[i]:第i个素数,最后一个素数是p[k] 
    int n; cin >> n;
    for(int i = 1; i <= k; i++){
        if(p[i] > n){
            cout << i - 1;
            return 0;
        }
    }
    cout << k;
    return 0;
}

 

posted @ 2025-04-24 16:38  CRt0729  阅读(25)  评论(0)    收藏  举报