1 条题解

  • 0
    @ 2024-10-27 18:31:05
    #include <bits/stdc++.h>
    using namespace std;
    
    //线性筛
    const int N = 1e8 +100;
    int primes[N];//素数 存储
    int c;//存储下标
    bool isp[N];//素数标记
    int n,q;
    
    void xxs()
    {
        //1 为素数 0 为合数
        for(int i = 2; i <= n;i++)
        {
            isp[i] = true;//默认为素数
        }
        //从2到n遍历
        for(int i = 2; i <= n;i++)
        {   //当前的数字是素数 存入数组
            if(isp[i] == true)
            {
                primes[++c] = i;
            }
            //i *  primes构造合数
            for(int j = 1; j <= c and i * primes[j]  <= n;j++)
            {
                //遍历所有的primes 都 * i 得到的合数进行标记
                isp[i * primes[j]] = false;
                //primes[j] 是i的最小质因子 停止
                if(i % primes[j] == 0) break;
            }
        }
    }
    
    
    int main()
    {
        cin>>n>>q;
    
        xxs();
    
        for(int i = 1; i <= q;i++)
        {
            int k;
            cin>>k;
            cout<<primes[k]<<endl;
    
        }
    }
    

    信息

    ID
    7413
    时间
    2000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    92
    已通过
    26
    上传者