HDU 1787 GCD Again/HDU 2824 The Euler function(欧拉函数模板)

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

#include <cstdio>
using namespace std;
int euler(int x)
{
    int ans=x;
    for(int i=2;i*i<=x;i++)
        if(x%i==0){
             ans=ans/i*(i-1);
             while(x%i==0) x/=i;
        }
    if(x>1) return ans=ans/x*(x-1);
    return ans;
}
int main()
{
    int n;
    while(~scanf("%d",&n)&&n){
        printf("%d\n",n-1-euler(n));
    }
    return 0;
}


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

#include <cstdio>
using namespace std;
const int maxn=3000000+5;
int ph[maxn];
void getph()
{
    for(int i=1;i<maxn;i++) ph[i]=i;
    for(int i=2;i<maxn;i++)
        if(ph[i]==i){
            for(int j=i;j<maxn;j+=i)
                ph[j]=ph[j]/i*(i-1);
    }
}
int main()
{
    getph();
    int a,b;
    while(~scanf("%d%d",&a,&b)){
        __int64 ans=0;
        for(int i=a;i<=b;i++) ans+=ph[i];
        printf("%I64d\n",ans);
    }
    return 0;
}


你可能感兴趣的:(HDU 1787 GCD Again/HDU 2824 The Euler function(欧拉函数模板))