【P1865】筛法求素数+区间!

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000010;
bool a[maxn];
int primesum[maxn];

void printPrimes(){
    memset(a,true,sizeof(a));
    a[0]=a[1]=false;
    for(int i=2;i<=maxn;i++){
        if(!a[i]) continue;
        int j=2;
        while(i*j<=maxn){
            a[i*j]=false;
            j++;
        }
    }
}

void Primes(){
    primesum[0]=0;
    int ans=0;
    for(int i=1;i<=maxn;i++){
        if(a[i]) ans++;
        primesum[i]=ans;
    }
}

int main(){
    printPrimes();
    Primes();

    int n,m;
    cin>>n>>m;
    int l,r;
    while(n--){
        cin>>l>>r;
        if(r>m || l<=0) {cout<<"Crossing the line\n";continue;}
        cout<<primesum[r]-primesum[l-1]<<"\n";
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/rign/p/10003776.html