HDU 1787 GCD Again

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

解题思路:

这也是一个简单的欧拉函数。

实现代码;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int Euler(long long n){
    long long res=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            res=res/i*(i-1);
            while(n%i==0)
                n/=i;

        }
    }
    if(n>1)
        res=res/n*(n-1);
    return res;
}

int main(){
    long long n;
    while(cin>>n){
        if(n==0) break;
        cout<<n-Euler(n)-1<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/IKnowYou0/p/6679742.html