[http://codeforces.com/problemset/problem/546/D]
多做题
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <string.h>
#define maxm 5000005
using namespace std;
long long prime[maxm],isprime[maxm],dp[maxm];
void init_prime(){
memset(isprime,1,sizeof(isprime));
prime[0]=0;
for(int i = 2; i < maxm;i++){
if(isprime[i])prime[++prime[0]]=i;
for(int j=1;j<=prime[0];j++){
if(i*prime[j]>=maxm)break;
isprime[i*prime[j]] = 0;
if(i%prime[j]==0)break;
}
}
for(int i=2;i<maxm;i++){
if(isprime[i]) dp[i]=1;
else{
for(int j=1;j<=prime[0];j++){
if(i%prime[j]==0){
dp[i]=dp[i/prime[j]]+1;
break;
}
}
}
}
for (int i = 3; i < maxm; ++i)
dp[i] += dp[i - 1];
}
long long gcd(long long a,long long b){
if(b == 0) return a;
return gcd(b,a%b);
}
long long exgcd(long long a,long long b,long long &x,long long &y){
if(b==0){x=1;y=0;return a;}
long long d = exgcd(b,a%b,x,y);
long long tmp = x;
x=y;
y=tmp-a/b*y;
return d;
}
int main()
{
init_prime();
long long t,a,b;
scanf("%I64d",&t);
while(t--){
scanf("%I64d%I64d",&a,&b);
printf("%I64d\n",dp[a]-dp[b]);
}
return 0;
}