http://acm.hdu.edu.cn/showproblem.php?pid=2824

同上一题,裸欧拉函数

View Code
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
const int MAX=3000001;
int phi[MAX];
int main()
{
    for(int i=2;i<MAX;i++)
        if(!phi[i])
            for(int j=i;j<MAX;j+=i)
            {
                if(!phi[j])
                    phi[j]=j;
                phi[j]-=phi[j]/i;
            }
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        __int64 sum=0;
        for(int i=a;i<=b;i++)
            sum+=phi[i];
        printf("%I64d\n",sum);
    }
    return 0;
}