1. 程式人生 > >【P1865】篩法求素數+區間!

【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; }