#include<iostream>
#include<cstring>
const int MAXN=3000000+10;
using namespace std;
int E[MAXN],prime[MAXN];
bool visit[MAXN];
void Eorue()
{
memset(visit, false, sizeof(visit));
for(int i = 2; i <= MAXN; i++)
{
if(!visit[i])
{
prime[++prime[0]] = i;
E[i] = i - 1;
}
for(int j = 1; j <= prime[0] && prime[j] * i <= MAXN; j++)
{
visit[prime[j]*i] = true;
if(i % prime[j] == 0)
{
E[i*prime[j]] = E[i] * prime[j];
break;
}
else
E[i*prime[j]] = E[i] * (prime[j] - 1);
}
}
}
int main(){
int a,b;
Eorue();
while(scanf("%d%d",&a,&b)!=EOF){
long long ans=0;
for(int i=a;i<=b;i++){
ans+=(long long)E[i];
}
printf("%lld\n",ans);
}
return 0;
}
tjut 2824
最新推荐文章于 2016-11-04 22:02:44 发布