CF 776E 欧拉函数

来源:互联网 发布:sql添加默认值约束 编辑:程序博客网 时间:2024/05/17 03:04

题目链接:这里
题意:如题。
解法:对于f(n),若自然数对(x,y)满足 x+y=n,且gcd(x,y)=1,则这样的数对对数为f(n)
证明f(n)=phi(n)
设有命题 对任意自然数x满足x < n,gcd(x,n)=1等价于gcd(x,y)=1 成立,则该式显然成立,下面证明这个命题。
假设gcd(x,y)=1时,gcd(x,n)=k!=1,则n=n’k,x=x’k,gcd(x,y)=gcd(x,n-x)=gcd(x’k,(n’-x’)k)=k,与假设gcd(x,y)=1不符,故gcd(x,y)=1时,gcd(x,n)=1。同理可证gcd(x,n)=1时,gcd(x,y)=1。
综上,f(n)=phi(n)。
下面那个函数意义就是 n的所有因数的欧拉函数之和,这个数其实就是n本身,不会证明。所以F_k(n)=phi(…phi(n))(求(k+1)/2次phi。

//CF 776E//f(n) = phi(n)//g(n) = n#include <bits/stdc++.h>using namespace std;long long eluer(long long n){    long long ret = n;    for(long long i = 2; i*i <= n; i++)    if(n%i == 0){        ret -= ret/i;        while(n%i == 0) n /= i;    }    if(n > 1) ret -= ret/n;    return ret;}long long n, k;int main(){    cin >> n >> k;    k = (k + 1) / 2;    while(k-- && n > 1) n = eluer(n);    cout << n % 1000000007 << endl;    return 0;}
0 0
原创粉丝点击