思路:
打表。
利用公式。
类似素数打表一样。
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+10;
bool isPrime[N];
long long res[N];
void init()
{
res[1]=1;
memset(isPrime,true,sizeof(isPrime));
for(long long i=2;i<=3000000;i++)
res[i]=i;
for(long long i=2;i<=3000000;i++)
{
if(!isPrime[i]) continue;
res[i]=res[i]*(i-1)/i;
for(long long j=i+i;j<=3000000;j+=i)
{
isPrime[j]=false;
res[j]=res[j]*(i-1)/i;
}
}
for(int i=2;i<=3000000;i++)
res[i]+=res[i-1];
}
int main()
{
init();
int a,b;
while(~scanf("%d%d",&a,&b))
printf("%lld\n",res[b]-res[a-1]);
return 0;
}