题解 | 质数统计

质数统计

https://www.nowcoder.com/practice/d832b0c1a0bd4394a3229f06c6f0b50b

#include <iostream>
using namespace std;

// 质数筛 + 前缀和

const int N = 1e6+10; 

int isPrime[N+20]={};
int Prime[N+20]={},cnt=0;

void ElerPrime() { // 欧拉筛
    for(int & i : isPrime) {
        i = 1; 
    }
    isPrime[0] = isPrime[1] = 0;
    for(int i=2;i<N;i++) {
        if (isPrime[i]) {
            Prime[cnt++] = i;
        }
        for(int j = 0;j<cnt && i*Prime[j] <= N;j++) {
            isPrime[i*Prime[j]] = 0;
            if(i%Prime[j] == 0)break; // 性能优化
        }
    }
}

int main() {
    ElerPrime();
    // 前缀和
    for(int i = 0;i<N;i++) {
        isPrime[i]+=isPrime[i-1];
    }
    // 主体
    int n;cin>>n;
    while(n--) {
        int l,r;
        cin>>l>>r;
        cout<<isPrime[r]-isPrime[l-1]<<endl;
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务