码迷,mamicode.com
首页 > 其他好文 > 详细

欧拉函数和欧拉定理

时间:2021-02-19 13:52:12      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:不同的   prime   数论   sqrt   tar   快速   特殊   素数   code   

欧拉函数是一种定义在正整数域的数论函数,在剩余系的运算中有重要作用

定义

欧拉函数的符号是 \(\varphi\),读作 phi。\(\varphi(n)\) 表示在不大于 \(n\) 的所有正整数中,与 \(n\) 互质的数的个数。需要注意的是,按照这个定义,\(\varphi(1)=1\)
欧拉函数是积性函数,对于任意满足 \((a,b)=1\)\(a,b\),都有 \(\varphi(a\cdot b)=\varphi(a)\cdot\varphi(b)\)

一些基本公式、结论

显然,对于任意质数 \(p\),它的欧拉函数值 \(\varphi(p)\) 都等于 \(p-1\),因为任意小于 \(p\) 的数都与 \(p\) 互质。不显然地,对于任意正整数 \(i\),设其所有质因数分别为 \(p_1,p_2,...,p_s\),那 \(i\) 的欧拉函数值 \(\varphi(i)=i\cdot\prod\limits_{j=1}^s\dfrac{p_j-1}{p_j}\)

引理 1. 若 \(p\) 为质数,\(k\) 为正整数,则 \(\varphi(p^k)=p^k-p^{k-1}\)

一个数 \(i\) 不与 \(p^k\) 互质当且仅当 \(p\mid i\),而在 \(\left[1,p^k\right]\) 中这样的 \(i\) 一共有 \(\dfrac{p^k}{p}=p^{k-1}\) 个,所以 \(\varphi(p^k)=p^k-p^{k-1}\)

引理 2. 根据唯一分解定理将 \(n\) 分解为 \(\prod\limits_{i=1}^s{p_i}^{k_i}\),则 \(\varphi(n)=n\cdot\prod\limits_{i=1}^s\dfrac{p_i-1}{p_i}\)

由于欧拉函数是积性函数

\[\begin{aligned}\varphi(n)&=\prod\limits_{i=1}^s\varphi({p_i}^{k_i})\\&=\prod\limits_{i=1}^s({p_i}^{k_i}-{p_i}^{k_i-1})\\&=\prod\limits_{i=1}^s\left({p_i-1}\right)\cdot{p_i}^{k_i-1}\\&=n\cdot\prod\limits_{i=1}^s\dfrac{p_i-1}{p_i}\end{aligned} \]

引理 2 是计算欧拉函数最一般的公式,根据它可以 \(O\left(\sqrt{n}\right)\) 地求出 \(\varphi(n)\)

线性筛求欧拉函数

根据欧拉函数的积性和引理 2,可得对于任意质数 \(p\)

\[\varphi(n\cdot p)=\begin{cases}\varphi(n)\cdot(p-1)&\text{if }(n,p)=1\\\varphi(n)\cdot p&\text{if }(n,p)\neq 1\end{cases} \]

在筛素数的同时可以求出欧拉函数。

phi[1] = 1;
for(int i = 2; i <= n; ++i){
	if(!vist[i]) prime[++cnt] = i;
	for(int j = 1; j <= cnt; ++j){
		if(i % prime[j])
			phi[i * prime[j]] = phi[i] * (prime[j] - 1);
		else{
			phi[i * prime[j]] = phi[i] * prime[j];
			break;
		}
	}
}

欧拉定理

对于任意 \(a,p\) 满足 \((a,p)=1\)\(a^{\varphi(p)}\equiv 1\pmod p\)

这一点可以构造证明。设 \(\varphi(p)\) 个正整数 \(m_1,m_2,\ldots,m_{\varphi(p)}\) 构成 \(p\) 的一个既约剩余系,根据既约剩余系的定义可以得到 \((m_i,p)=1\)

对于其中任意两个不同的数 \(m_i,m_j\),由于 \((a,p)=1\)\(a\cdot (m_i-m_j)\nmid p\)。换言之 \(a\cdot m_i\)\(a\cdot m_j\) 在模 \(p\) 意义下不同余。

由于其中的数两两不同余,\(a\cdot m_1,a\cdot m_2,\ldots,a\cdot m_{\varphi(p)}\) 也构成 \(p\) 的一个既约剩余系。于是 \(\prod(a\cdot m_i)\equiv\prod m_i\pmod p\),即 \(a^{\varphi(p)}\equiv 1\pmod p\)

费马小定理

对于任意 \(a\) 和任意质数 \(p\) 满足 \(p \nmid a\)\(a^{p}\equiv a\pmod p\)

费马小定理是欧拉定理的特殊情况。我们可以用更简洁的数学归纳法来证明它:

显然 \(1^{p}\equiv 1\pmod p\)。假设我们已经证明 \(a^{p}\equiv a\pmod{p}\),根据二项式定理

\[(a+1)^{p}=\sum\limits_{i=0}^{p}\binom{p}{i}\cdot a^i \]

其中的二项式系数 \(\binom{p}{i}\),由于 \(p\) 与任意可能的 \(i\) 互质(除了 \(i=0\)\(i=p\)),因此 \(\forall i\neq 0\and i\neq p,\binom{p}{i}\equiv 0\pmod{p}\),而对于 \(i=0\)\(i=p\),显然 \(\binom{p}{i}=1\)。于是可以将原式写作

\[(a+1)^p\equiv a^{p}+1\pmod{p} \]

\[(a+1)^p\equiv a+1\pmod p \]

得证。

扩展欧拉定理

对于任意 \(a,b,p\)\(a^{b}\equiv\begin{cases}a^b&\text{if }b<\varphi(p)\\a^{b\bmod \varphi(p)+\varphi(p)}&\text{if }b\ge\varphi(p)\end{cases}\pmod{p}\)

证明略。

嵌套幂

\(n^{n^{n^{\ldots}}}\bmod p\)

根据扩展欧拉定理

\[n^{n^{n^{\ldots}}}\equiv n^{n^{n^{\ldots}}\bmod \varphi(p)+\varphi(p)}\pmod p \]

\[n^{n^{n^{\ldots}}}\equiv n^{n^{n^{\ldots}}\bmod \varphi(\varphi(p))+\varphi(\varphi(p))}\pmod {\varphi(p)} \]

每迭代一次,模数就变为其欧拉函数。可以证明,在 \(O(\log p)\) 级别次迭代内,模数可以降至 \(1\),此时式子值恒为 \(0\)

int solve(int n, int p){
	if(p == 1) return 0; 
	return qpow(n, solve(n, phi[p]) + phi[p]) % p;
}

由于使用了快速幂,时间复杂度为 \(O(n\log^2 p)\)。类似的式子都可以套用这种方法计算。

参考例题

BZOJ3884 上帝与集合的正确用法

LOJ2142 「SHOI2017」相逢是问候

LUOGU3934 [Ynoi2016] 炸脖龙I

欧拉函数和欧拉定理

标签:不同的   prime   数论   sqrt   tar   快速   特殊   素数   code   

原文地址:https://www.cnblogs.com/feiko/p/euler.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!