转载自:https://blog.csdn.net/qq_24451605/article/details/47045279
借鉴:https://blog.csdn.net/qq_24451605/article/details/47045135
说明:
- 质因子(或质因数)在数论里是指能整除给定正整数的质数。比如360 = 23 * 32 * 5,质因子就是2,3,5。
- 除了1以外,两个没有其他共同质因子的正整数称为互质。
- 若 gcd(a, b) == 1,a, b互质。
- 若 gcd(a, c) == 1,gcd(b, c) == 1,则有 gcd(a * b, c) == 1。因为相乘以后还是没有公因子。
- 若 gcd(a, d) == 1,a = b * c,则有 gcd(b, d) == 1,gcd(c, d) == 1。因为整体既然没有公因子,部分也必然不会有。
欧拉函数的推导和证明:
欧拉函数,φ(n),或表示为phi(n),表示1~n中与n互质的数的个数。
推导:
设 p 为 n 的一个质因子。
令 m = n / p。
当 m % p == 0 时:
φ(n) = φ(m) * p
当 m % p != 0 时:
φ(n) = φ(m) * (p - 1)
证明:
首先,由于 n = m * p,所以所有与 n 互质的数必然同时与 m 和 p 互质;其次,所有即与 m 互质,也与 p 互质的数,都与 n 互质;最后,所有不满足即与 m 互质,也与 p 互质的数必然不与 n 互质。
于是,问题就从“在 1~n 中找与 n 互质的数的个数。”变成“在 1~n 中找即与 m 互质,也与 p 互质的数的个数。”。
正式开始证明:
我们先把 1~n 中所有与 m 互质的数全部找出来。
为此我们把 1~n 划分为 p 个区间,每个区间长度为 m,第 i 个区间表示为 (m * (i - 1), m * i],左开右闭,1 <= i <= p。
设第 i 个区间上第 j 个数为 xij ,则 xij = m * (i - 1) + j,1 <= j <= m。
要判断 xij 是否与 m 互质,只需要看 gcd(m, xij) 是否等于1。
又 gcd(m, xij) = gcd(m, j)。(欧几里德算法)
所以要求第 i 个区间上与 m 互质的数的个数只需要计算有多少个 j 满足 gcd(m, j) == 1,即 1~m 中有多少个数与 m 互质,很显然,答案是 φ(m)。
而这样的区间有 p 个,所以 1~n 中所有与 m 互质的数的个数为 φ(m) * p 个。
若所有与 m 互质的数都与 p 互质,则必有 m % p == 0,并且为充要条件,证明如下:
必要性:
若 m % p != 0,结合 p 是素数可知 gcd(m, p) == 1。
设 x 为 1~n 中某个与 m 和 p 互质的数。
则有 gcd(x, m) == 1,gcd(x, p) == 1。
∵ gcd(m, p) == 1。
∴ gcd(x * p, m) == 1。
∴ gcd(x * p, p) == 1 与题设矛盾。
充分性:
∵ m % p == 0。
∴ 必然存在一个整数 k ,使得 m = k * p。
设 x 为 1~n 中某个与 m 互质的数。
∴ gcd(x, m) == 1。
∴ gcd(x, p) == 1。
∴ 得证。
真正的证明开始了:
设 x 为 1~n 中某个与 m 互质数。
若 m % p == 0,“在 1~n 中找即与 m 互质,也与 p 互质的数的个数”即为“在 1~n 中找与 m 互质的数的个数”,因此 φ(n) = φ(m) * p。
若 m % p != 0,需要从所有与 m 互质的数中剔除掉与 p 不互质的数,因为 p 是质数,所以需要剔除掉有因子 p 的数。1~n 中所有含因子 p 的数所构成的集合为 {i * p | 1 <= p <= m},又因为 m 与 p 互质,所以判断 m 与 i * p 是否互质只需要判断 m 与 i 是否互质即可,是不是有点眼熟,这不就是 φ(m) 吗!因此 φ(n) = φ(m) * (p - 1)。
欧拉函数的推论:
对于素数 n ,φ(n) = n -1 。
对于两个不同素数 p, q ,它们的乘积 n = p * q 满足 φ(n) = (p -1) * (q -1) 。
欧拉定理:
TODO