POJ 2407 Relatives (欧拉函数)

不懂数论。

φ(n)指不大于n与n互素的数的个数  【1,n】。

欧拉函数的几个性质:

1.如果n为质数 那么φ(n)=n−1。(除了它本身 其它所有数与它互素)

2.n=p^k  那么φ(n)=p^k-p^(k-1)     (除了p的倍数,其他数都与p互质)

后面两条我并不理解。

3.当gcd(n,m)=1时, φ(nm)=φ(n)∗φ(m) 证明: 因为φ(n)是积性函数。

.

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

猜你喜欢

转载自blog.csdn.net/k_koris/article/details/81632286