这题卡空间很严格,所以要求代码精简,经过多次优化之后,觉得这个还不错(话说LONG LONG 型数组废空间呀,应该是int的两倍吧。。。。)
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <memory.h>
#define ss(a,b) scanf("%d%d",&a,&b)
#define N 3000005
#define ll __int64
using namespace std;
int e[N];
void init()
{
int i,j;
for (i=1;i<N;i++) e[i]=i;
for (i=2;i<N;i++)
if (e[i]==i)
{
e[i]=i-1;
for (j=i*2;j<N;j+=i) e[j]=e[j]/i*(i-1);
}
}
int main()
{
init();
int a,b;
while (ss(a,b)!=EOF)
{
ll sum=0;
for (int i=a;i<=b;i++) sum+=e[i];
printf("%I64d\n",sum);
}
return 0;
}