#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e7+10;
void get_primes(int n);
int pre_sum(int l, int r);
int q;
bool st[N];
int primes[N], cnt;
int sum[N];
signed main()
{
get_primes(N);//把非质数置为true
for(int i=0;i<cnt;i++)
for(int j=0;j<cnt&&primes[i]*primes[j]<N;j++)
st[primes[i]*primes[j]]=false;//把质数积置为false
st[1]=true;//前缀和,解决区间询问
for(int i=1;i<N;i++) sum[i]=sum[i-1]+(!st[i]);//false=0, true=1
cin>>q;
while(q--)
{
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", pre_sum(l, r));
}
}
void get_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i]) primes[cnt++]=i;
for(int j=0;primes[j]<=n/i;j++)
{
st[i*primes[j]]=true;
if(i%primes[j]==0) break;
}
}
}
int pre_sum(int l, int r)
{
return sum[r]-sum[l-1];
}
小x的质数
最新推荐文章于 2024-12-01 01:04:15 发布