欧拉函数和欧拉定理
欧拉函数和欧拉定理
欧拉函数的定义
欧拉函数(Euler's totient function),即
比如说
当 n 是质数的时候,显然有
欧拉函数的一些性质&结论
- 欧拉函数是积性函数
不知道积性函数?点这里。
-
证明:如果 $gcd(k,n)=d$, 那么 $gcd\left(\displaystyle\frac{k}{d},\frac{n}{d} \right)=1,(k<n) 如果我们设
f(x) 表示gcd(k,n)=x 的数的个数,那么n=\displaystyle\sum_{i=1}^n f(i) 。根据上面的证明,我们发现
f(x)=\varphi\left(\displaystyle\frac{n}{x}\right) ,从而
n=\displaystyle\sum_{i=1}^n \varphi\left(\displaystyle\frac{n}{x}\right) 。注意到约数
d 和\displaystyle\frac{n}{d} 具有对称性,所以上式化为n=\displaystyle\sum_{d|n}\varphi(d) 。 -
若
n = p^k ,其中p 是质数,那么\varphi(n)=p^k-p^{k-1}=p^{k-1} \times (p-1) 。证明:显然对于从 1 到
p^k 的所有数中,除了p^{k-1} 个p 的倍数以外其它数都与p^k 互素,故\varphi(n)=p^k-p^{k-1}=p^{k-1} \times (p-1) ,证毕。 -
由唯一分解定理,设
n=\displaystyle\prod_{i=1}^s p_i^{k_i} ,其中p_i 是质数,有\varphi(n)=n \times \displaystyle\prod_{i=1}^s(1-\frac{1}{p}) 。证明:
- 引理:设
p 为任意质数,那么\varphi(n)=p^{k-1} \times (p-1) 。
\varphi(n) = \displaystyle\prod_{i=1}^{s} \varphi(p_i^{k_i}) = \prod_{i=1}^s(p_i-1)p_i^{k_i-1} = \prod_{i=1}^sp_i^{k_i} \times (1-\frac{1}{p_i}) = n\displaystyle\prod_{i=1}^s(1-\frac{1}{p_i}) - 引理:设
如何求欧拉函数值
如果只要求一个数的欧拉函数值,那么直接根据定义质因数分解的同时求就好了。
int phi(int n) {
int 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;
}
如果是多个数的欧拉函数值,可以利用线性筛法来求得。
void pre() {
memset(isprime, 1, sizeof(isprime));
int cnt = 0;
isprime[1] = 0;
phi[1] = 1;
for (int i = 2; i <= 5000000; i++) {
if (isprime[i]) {
prime[++cnt] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= cnt && i * prime[j] <= 5000000; j++) {
isprime[i * prime[j]] = 0;
if (i % prime[j])
phi[i * prime[j]] = phi[i] * phi[prime[j]];
else {
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
}
}
}
欧拉定理
与欧拉函数紧密相关的一个定理就是欧拉定理。其描述如下:
若
证明:
证明转载自M_lear
记小于 n 且与 n 互质的正整数集合为
令
由最大公约数的性质可得
所以
假设
即