欧拉函数与欧拉定理

# 欧拉筛

# 模板

vector<int> prime;
bool isprime[N];
inline void GetPrime(){
	isprime[0] = isprime[1] = 1;
	for(int i = 2; i < N; i ++){
		if(!isprime[i]) prime.push_back(i); //若未被标记,则i为质数
		for(int j = 0; j < prime.size() && prime[j] * i < N; j ++){
			isprime[i * prime[j]] = 1; //打上合数标记
			if(i % prime[j] == 0) break; //p[j]为i的约数时退出
		}
	}
}
1
2
3
4
5
6
7
8
9
10
11
12

# 算术基本定理

算术基本定理,又称唯一分解定理
定理内容是:
任何一个大于11的自然数NN,如果NN不为质数,都可以唯一分解成有限个质数的乘积 N=P1a1P2a2...PnanN=P_1^{a_1}P_2^{a_2}...P_n^{a_n} 。这里 P1<P2<...<PnP_1\lt P_2\lt...\lt P_n 均为质数,指数 aia_i 均为正整数
这样的分解称为NN的标准分解式

在线性筛中的应用:每个数因它最小的质数而被标记
规则体现在:如果某个数numnum包含了某个divdiv,那么这个最小divdiv可以和别的数凑成一个更大的数去标记,那么此时后面就不需要继续用numnum去凑数标记了。

例: (i,j)=(4,2),,i%j=0(i,j)=(4,2),\quad,i\%j=0 ,那么说明44中有22,走到后面有个12121212可以因为(6,2)(6,2)被标记,那么此时就不需要用(4,3)(4,3)去进行标记了

# 欧拉函数

# 概念

i=1n[gcd(i,n)=1]\sum\limits_{i=1}^n[gcd(i,n)=1] ,记为 ϕ(n)\phi(n)
欧拉函数的通式: ϕ(x)=xi=1n(11pi)\phi(x)=x*\prod\limits_{i=1}^n(1-\frac1{p_i})
欧拉函数的性质: nn的因子的欧拉函数加起来等于nn

# 证明

情况1.如果 nn 是一个素数:
n=pϕ(n)=n(11p)=p(11p)=p1n=p\quad\phi(n)=n(1-\frac1p)=p(1-\frac1p)=p-1

情况2.如果 nn 是一个素数 ppα\alpha 次幂:
那么从1n1\rightarrow n中,只有pp的倍数不与nn互质,从11nnp2p3p.....pα1pp、2p、3p、.....、p^{\alpha-1}p 一共有 pα1p^{\alpha-1}
所以 ϕ(n)=npα1=pαpα1=pα(11p)=n(11p)\phi(n)=n-p^{\alpha-1}=p^{\alpha}-p^{\alpha-1}=p^{\alpha}(1-\frac1p)=n(1-\frac1p)

情况3.如果 nn 是两个素数 pp qq 的乘积:
显然此时与nn互质的数既不是 pp 的倍数也不是 qq 的倍数。类似的情况22中的分析,pp的倍数应有qq个,qq 的倍数有pp个,但是还多算了一个既是pp也是qq的倍数nn,于是 ϕ(n)=n(p+q1)=pqpq+1=(p1)(q1)=n(11p)(11q)\phi(n)=n-(p+q-1)=p* q-p-q+1=(p-1)(q-1)=n(1-\frac1p)(1-\frac1q)
还可以发: ϕ(n)=ϕ(p×q)(11p)(11q)=ϕ(p)×ϕ(q)\phi(n)=\phi(p\times q)(1-\frac 1p)(1-\frac 1q) = \phi(p)\times\phi(q)

概念:积性函数和完全积性函数 (欧拉函数是积性函数)
完全积性函数:ϕ(n)=ϕ(p×q)=ϕ(p)×ϕ(q)\phi(n)=\phi(p\times q)=\phi(p)\times\phi(q) 中不要求 pp qq 互质
积性函数:ϕ(n)=ϕ(p×q)=ϕ(p)×ϕ(q)\phi(n)=\phi(p\times q)=\phi(p)\times \phi(q) 中要求 pp qq 互质

情况4.nn 是某个 mm 和一个于 mm 互质的素数 pp 的乘积,即: n=mpn = m * p(完整的证明需要各种定理,这里不详解)假设 mm 是之前讨论的情况,即 mm 满足欧拉函数公式:

ϕ(m)=mi=1k(11pi)\phi(m)=m*\prod^k_{i=1}(1-\frac1{p_i})

同时因为 n=mpn = m * pmmpp 互质, 则有:

ϕ(n)=ϕ(mp)=ϕ(m)ϕ(p)\phi(n)=\phi(m*p)=\phi(m)*\phi(p)

另外,由情况 11 可知: ϕ(p)=p1=p(11p)\phi(p)=p-1=p(1-\frac1p)
显然, ϕ(m)ϕ(p)\phi(m) * \phi(p) 得到的公式,依然满足欧拉函数

情况5. n=mpn = m * ppp 是素数,但是 pp 不与 mm 互质
pp 是素数,但不与 mm 互质,显然 ppmm 的因子,可以转化为 n=q×pα=ϕ(q)×ϕ(pα)n=q\times p^{\alpha}=\phi(q)\times\phi(p^{\alpha}) ,其中 qq 不含 pp 的因子 故:

ϕ(n)=ϕ(qpα)=ϕ(q)ϕ(pα)=qpαi=1k(11pi)=ni=1k(11pi)\phi(n)=\phi(q*p^{\alpha})=\phi(q)*\phi(p^{\alpha})=q*p\alpha*\prod^k_{i=1}(1-\frac1{p_i})=n*\prod^k_{i=1}(1-\frac1{p_i})

公式显然依然成立

# 线性求法

for(int i = 2; i <= N; i ++){
	if(!vis[i]) prime.push_back(i), phi[i] = i - 1;
	for(int j = 0; j < prime.size() && i * p[j] <= N; j ++){
		vis[i * prime[j]] = 1;
		if(i % prime[j] == 0) { phi[i * prime[j]] = phi[i] * prime[j]; break; }
		phi[i * prime[j]] = phi[i] * (prime[j] - 1);
	}
}
1
2
3
4
5
6
7
8

# 欧拉定理

# 概念

nn, aa 为正整数,且它们互质,则

aϕ(n)1(modn)a^{\phi(n)}\equiv1(mod\quad n)

显然:当 nn 为质数时 an11(modn)a^{n-1}\equiv1(mod\quad n) 就是费马小定理

# 应用 —— 逆元

如果在模运算中有除法,同时模数不是质数,则此时不可以用费马小定理,可以用欧拉定理
逆元就相当于把费马小定理中的质数一般化一下: aa 的逆元 = aϕ(n)1a^{\phi(n)-1}

# 扩展欧拉定理

# 概念

用来降幂,又称为欧拉降幂

ab{ab%ϕ(n)gcd(a,n)=1agcd(a,n)1,b<ϕ(n)(modn)ab%ϕ(n)+ϕ(n)gcd(a,n)1,bϕ(n)a^b \equiv\left\{\begin{array}{ll} a^{b\%\phi(n)}&gcd(a,n)=1\\ a&gcd(a,n)\neq1,b\lt\phi(n)\quad(mod\quad n)\\ a^{b\%\phi(n)+\phi(n)}&gcd(a,n)\neq1,b\ge\phi(n) \end{array}\right.

# 程序实现

int main(){
	while(scanf("%lld%s%lld", &a, b, &n) == 3){
		ll len = strlen(b), p = phi(c), up = 0;
		for(ll i = 0; i < len; i ++) up = (up * 10 + b[i] - '0') % p;
		up += p; // 加还是不加取决于 [gcd(a, n) = 1]
		outLL(ksm(a, up, n));
	}
}
1
2
3
4
5
6
7
8

# 例题

给定一个长度为n的数组以及若干次询问 l,rl, r.
求: alal+1al+2...armodma_l^{a_{l+1}^{a_{l+2}^{...^{a_r}}}}mod\;m
解:使用欧拉降幂递归求指数:

inline ll get(ll l, ll r, ll m){
	if(l == r || m == 1) return mo(a[l], m);
	return ksm(a[l], get(l + 1, r, phi(m)), m);
}
1
2
3
4

T组询问,每次询问给出一正整数 p(p <= 1e7), 求 222...2modp2^{2^{2^{...^{2}}}} mod \;p 递归层数会不会很大?
欧拉函数两个性质:
(1)p>2时, ϕ(p)\phi(p) 为偶数
(2)p如果为偶数, ϕ(p)p2\phi(p)\le\frac p2
可以证明:递归层数为 O(logp)O(log\;p)

Last Updated: 10/14/2023, 7:51:49 PM