hdu 2824 The Euler function

快速求出欧拉函数值……注意数据类型,否则会超时的

#include<iostream>
using namespace std;
const
long MMAX=3000000;
__int64
Euler[MMAX];
void
Get_Euler()
{

    int
i,j;
    for
(i=1;i<MMAX;i++)
        Euler[i]=i;
    for
(i=2;i<MMAX;i++)
    {

        if
(Euler[i]==i)
        {

            for
(j=i;j<MMAX;j+=i)
                Euler[j]=Euler[j]/i*(i-1);
        }
    }
}

int
main()
{

    Get_Euler();
    int
n,m;
    __int64
sum;
    while
(scanf("%d%d",&n,&m)!=EOF)
    {

        sum=0;
        for
(int i=n;i<=m;i++)
            sum+=Euler[i];
        printf("%I64d\n",sum);
    }

    return
0;
}

你可能感兴趣的:(function)