首页 > 学院 > 开发设计 > 正文

CF 776E 欧拉函数

2019-11-06 06:07:17
字体:
来源:转载
供稿:网友

题目链接:这里 题意:如题。 解法:对于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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表