6 条题解

  • 0
    @ 2023-8-26 21:27:29

            \ \ \ \ \ \ \ 一次性统计完所有数字对应的孪生素数对数,这样就不需要每次重新循环统计。

    #include <cstdio>
    
    const int MAXN = 1000010;
    
    bool isPrime[MAXN];
    int twinPrimes[MAXN];
    
    int fillIsPrime(){
        for(int i = 2; i <= MAXN; i++){
            isPrime[i] = true;
        }
        for(int i = 2; i <= MAXN; i++){
            if(isPrime[i]){
                for(int j = 2 * i; j <= MAXN; j += i){
                    isPrime[j] = false;
                }
            }
        }
        return 0;
    }
    
    int main(){
        fillIsPrime();
        int n, m, rec = 1;
        scanf("%d", &n);
        twinPrimes[0] = 0;
        twinPrimes[1] = 0;
        twinPrimes[2] = 0;
        for(int i = 3; i <= 1000010; i ++){
            if(isPrime[i] && isPrime[i - 2]){
                rec ++;
            }
            twinPrimes[i] = rec;
        }
        for(int i = 1; i <= n; i ++){
            scanf("%d", &m);
            printf("%d\n", twinPrimes[m]);
        }
        return 0;
    }
    

    信息

    ID
    128
    时间
    3000ms
    内存
    128MiB
    难度
    8
    标签
    (无)
    递交数
    1638
    已通过
    222
    上传者