我们首先处理出的所有素数,由于时间限制,空间限制很大,我们使用最优版的埃氏筛(时间复杂度),然后对于每一对素数处理,标记,注意他们两个乘起来如果超过了,就不要计算。具体实现见代码:

// Problem: 漂亮数
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11214/H
// Memory Limit: 2097152 MB
// Time Limit: 6000 ms
// 
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
#define pb push_back
#define vc vector
#define fst first
#define scd second
#define int long long
#define rep(i,x,y) for(int i=x;i<=y;i++)
using namespace std;
int read(){
    int res=0,fs=1; char c=getchar();
    while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
    while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
    return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,ans,tmp,k;
const int N=1e8+5;
bool a[N];
int qzh[N],pri[10000005];
typedef pair<int,int> P;
//struct PROBLEM_SOLVER{
//       int n,m;
//}solver;

//signed main(){
signed main() {
    // ios::sync_with_stdio(false);
    a[1]=1;
    for(int i=2;i*i<=N-5;i++){
        if(a[i]==0){
            for(int j=i*i;j<=N-5;j+=i) {
                a[j]=1;
            }
        }
    }
    rep(i,1,N-5){
        if(a[i]==0) cnt++,pri[cnt]=i;
        a[i]=0;
    }
    rep(i,1,cnt) rep(j,i,cnt) {
        if(pri[i]*pri[j]<=N){
            a[pri[i]*pri[j]]=1;
        }else break;
    }


    rep(i,1,N-5){
        qzh[i]=qzh[i-1]+(a[i]==1);
    }
    cin>>tmp;
    while(tmp--){
        int l,r; 
        l=read(),r=read();
        if(l==0) cout<<qzh[r]<<'\n';
        else 
        cout<<qzh[r]-qzh[l-1]<<'\n';
    }
    return 0;
}