数论 _ 互质与欧拉函数
概念
互质
若gcd(a,b)=1 则称a与b互质。
欧拉函数
1~N 中与N 互质的数的个数被称为欧拉函数,记为。
若N根据算术基本定理分解为
则
证明:
设p 是 N 的质因子,1~N中的倍数有共个。 同理,若 q 也是N的因子,则1~N中q的倍数有N/q个。
如果我们把这 个数去掉,那么 的倍数被排除了两次,根据容斥原理,需要加回来一次。
因此,1~N 中不与N 含有共同质因子p或q 的数的个数为:
式子展开后就和上面的容斥原理一样了,证毕。
模板代码
求一个数phi
根据计算式,我们只需要再分解质因数,即可顺便求出一个数的欧拉函数
上限复杂度:
下限复杂度:
模板代码
int phi(int x) { int res = x; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { res = res / i * (i - 1); while (x % i == 0) x /= i; } if (x > 1) res = res / x * (x - 1); return res; }
求1 ~ n的phi
如果与上面的方法来求1~n的欧拉函数复杂度是。
如果在线性筛法过程中求欧拉函数,时间复杂度:
typedef long long LL; const int N = 1000010; int primes[N], cnt; int euler[N]; bool st[N]; void get_eulers(int n) { euler[1] = 1; for (int i = 2; i <= n; i ++ ) { if (!st[i]) { primes[cnt ++ ] = i; euler[i] = i - 1; } for (int j = 0; primes[j] <= n / i; j ++ ) { int t = primes[j] * i; st[t] = true; if (i % primes[j] == 0) { euler[t] = euler[i] * primes[j]; break; } euler[t] = euler[i] * (primes[j] - 1); } } }
性质
性质0
对于质数p,它的欧拉函数值
证明:
因为p为质数,所以比它小的数都和它互质,即在1~p中共有p-1个数和它互质。
证毕。
性质1
,1~n中与n 互质的数的和为
证明
由于gcd(n,x)=gcd(n,n-x),所以与n互质的数,是"成对"的出现。进而n+(n-x)=n. 就得出了
性质2
若a,b互质,则。
证明
a,b互质,所以分解质因数没有一样的,根据欧拉函数的公式就可以将 φ(a) ,φ(b)合并得出了φ(N)。
把性质2推过到一般函数可以得到积性函数的概念。
积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数)
性质2.1
当n为奇数时,
证明:
当n为奇数时,n与2互质由欧拉函数是积性函数可知,n与2互质时,ϕ(2n)=ϕ(2)∗ϕ(n)又因为ϕ(2)=1所以ϕ(2n)=ϕ(n)
证毕。
性质3
p 为质数,若p|n 且,则
证明
y由可知 中有质因数有p,因此将 和 的欧拉函数表达式写出后,相除结果就是p,所以性质成立。
性质4
p 为质数,若p|n 且
不n整除,则
证明
由不被n整除可知p与n/p互质,由于φ是积性函数,故 ,而 ,所以性质成立。
性质5
当时,
证明:
因为,所以n只有p一个质因数,则由欧拉函数的计算式可得
性质6
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/16506455.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步