HDU 2824 The Euler function

题目地址:点击打开链接

思路:递推求欧拉函数

AC代码:

#include <iostream>
#include <cstdio>

#define maxn 3000000//不能加分号

long long x[3000000];

int main()
{
    long long sum;
    int i,j,a,b;
    for(i=1; i<maxn; i++)
        x[i] = i;
    for(i=2; i<maxn; i+=2)
        x[i] /= 2;
    for(i=3; i<maxn; i+=2)
    {
        if(x[i] == i)
        {
            for(j=i; j<maxn; j+=i)
            {
                x[j] -= x[j] / i;
            }
        }
    }
    while(scanf("%d%d",&a,&b) != EOF)
    {
        sum = 0;
        for(i=a; i<=b; i++)
        {
            sum += x[i];
        }
        printf("%I64d\n",sum);
    }
    return 0;
}


你可能感兴趣的:(HDU 2824 The Euler function)