题目:
分析:
表示会了线性素筛就是可以为所欲为
但其实考场上忘了怎么打,结果只骗了
30
30
30
p
o
i
n
t
s
points
points
代码:
#pragma GCC optimize(3)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<list>
#include<ctime>
#include<iomanip>
#include<string>
#include<bitset>
#include<deque>
#include<set>
#define N 10000003
#define LL long long
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
void write(int x)
{
if(x>9)write(x/10);
putchar(x%10+48);
}
int T,l,r,ss[N],tot,s[N];
bool bz[N],p[N];
int main()
{
memset(bz,1,sizeof(bz));
bz[1]=0;
for(int i=2;i<=N-3;i++)
{
if(bz[i])ss[++tot]=i;
for(int j=1;j<=tot && i*ss[j]<N;j++)
{
bz[i*ss[j]]=0;
if(i%ss[j]==0)break;
}
}
memset(p,1,sizeof(p));
p[1]=0;
for(int i=2;i<=N-3;i++)
{
s[i]=s[i-1];
if(p[i])s[i]++;
for(int j=1;j<=tot && i*ss[j]<N;j++)
{
if(!bz[i])p[i*ss[j]]=0;
if(i%ss[j]==0)break;
}
}
T=read();
while(T--)
{
l=read();r=read();
write(s[r]-s[l-1]);
putchar('\n');
}
return 0;
}