x为质因数时 n/x 至n==1的次数最多
打表a的质因数个数-b的质因数个数
代码:
#include<cstdio>
#include<cstring>
#define M 5000000+10
int dv[M];
void init()<span style="color:#006600;">//质因数打表</span>
{
memset(dv,0,sizeof(dv));
for(int i=2;i<M;i++)
{
if(!dv[i])
{
for(int j=i;j<M;j+=i)<span style="color:#006600;">//j的质因数i的个数</span>
{
int tmp=j;
while(tmp%i==0)
{
dv[j]++;
tmp=tmp/i;
}
}
}
}
for(int i=2;i<M;i++)
{
dv[i]+=dv[i-1];
}
}
int main()
{
init();
int t,a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
printf("%d\n",dv[a]-dv[b]);
}
return 0;
}