欧拉函数和欧拉定理

前置知识:

欧拉函数:质数相关,约数相关

欧拉定理:同余,简化剩余系

详情可见 OI wiki


定义 1N1 \sim N 中和 NN 互质的数个数称欧拉函数,记作 φ(N)\varphi(N)

单个欧拉函数求解:

φ(N)=N×pn(p1p)  \varphi(N) = N \times \prod_{p \mid n} (\frac{p-1}{p})~~ 其中p是质数

证明

容斥原理,设 p,qp,q 分别是 NN 的质因子

则要筛掉 N/pN / pN/qN / q 个数,并且 pqp*q 及倍数算了两次,还要加上 N/(pq)N / (p*q)

所以 NNpNq+Npq=N×p1p×q1qN - \frac{N}{p} - \frac{N}{q} + \frac{N}{pq} = N \times \frac{p-1}{p} \times \frac{q-1}{q}

欧拉函数性质定理

  1. n>1,1n\forall n > 1 , 1 \sim n 和 n 互质的数的和为 n×φ(n)/2n \times \varphi(n) /2
证明1

gcd(a,b)=gcd(a,ab)\gcd(a,b) = gcd(a,a-b) 所以和 nn 互质的数成对出现,平均值为 n/2n / 2

互质的数个数为 φ(n)\varphi(n)

  1. φ(n)\varphi(n) 是积性函数,也就是对于 a,ba,b 互质,有 φ(ab)=φ(a)×φ(b)\varphi(ab)=\varphi(a) \times \varphi(b),该定理由分解质因数得到

  2. pnφ(p)=n\sum_{p \mid n} \varphi(p) = n

  3. pp 为质数,pnp \mid np2np^2 \mid n , 有 φ(n)=φ(n/p)×p\varphi(n) = \varphi(n/p) \times p

  4. pp 为质数,pnp \mid np2np^2 \nmid n , 有 φ(n)=φ(n/p)×(p1)\varphi(n) = \varphi(n/p) \times (p-1)

证明3,4

pnp \mid np2np^2 \mid n,则 p,n/pp , n/p 质因子种类相同,计算 φ(n)÷φ(n/p)=p\varphi(n) \div \varphi(n/p) = p

pnp \mid np2np^2 \nmid n,则 p,n/pp , n/p 互质,根据 定理2φ(n)=φ(n/p)×φ(p)=φ(n/p)×(p1)\varphi(n) = \varphi(n/p) \times \varphi(p) =\varphi(n/p) \times (p-1)

运用性质3,4,可以在 O(n)O(n) 时间计算 φ(2n)\varphi(2 \sim n)

在线性素数筛中直接计算即可

code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void cal_pri(int x)
{
for(int i=2;i<=x;i++)
{
if(!v[i])
{
v[i]=i;
pri[++top]=i;
phi[i]=i-1;
}
for(int j=1;j<=top&&i*pri[j]<=x;j++)
{
if(pri[j]>v[i]) break;
v[i*pri[j]]=pri[j];
phi[i*pri[j]]=phi[i]*(i%pri[j]?pri[j]-1:pri[j]);
}
}
}

欧拉定理

n,pn,p 互质,则 nφ(p)1 (mod p)n^{\varphi(p)} \equiv 1 ~ (mod ~ p)

证明

nn 的简化剩余系为 {a1,a2,...,aφ(n)}\{\overline{a_1} , \overline{a_2} , ... , \overline{a_{\varphi(n)}} \}

对于 ai,aj\forall a_i,a_j , 有 nainaj(mod p)n * a_i \equiv n* a_j (mod ~ p) , 移项得 n(aiaj)0(mod p)n * (a_i - a_j) \equiv 0 (mod ~ p)

因为 n,pn,p 互质,所以 aiaj0a_i - a_j \equiv 0 , 进而 aiaja_i \equiv a_j

因为简化剩余系模p乘法封闭,n,pn,p 互质,所以 ai,nai\forall a_i ,n * a_i也属于 n 的简化剩余系

所以:

nφ(p)a1a2...aφ(n)(aa1)(aa2)...(aaφ(n))a1a2...aφ(n)(mod p)n^{\varphi(p)} a_1a_2...a_{\varphi(n)} \equiv (aa_1)(aa_2)...(aa_{\varphi(n)}) \equiv a_1a_2...a_{\varphi(n)} (mod ~ p)

由此得到费马小定理:(同时乘a)

p是质数,则对于任意整数 aa , apa(mod p)a^p \equiv a (mod ~ p)

欧拉定理的扩展

  1. a,pa,p 互质, 则对于任意整数 bb ,有 abab mod φ(p) (mod p)a^b \equiv a ^ {b ~ mod ~ \varphi(p)} ~ (mod ~ p)

  2. a,pa,p 不互质,对于整数bφ(p)b \geq \varphi(p),有 aba(b mod φ(p) )+φ(p) (mod p)a^b \equiv a ^ {(b ~ mod ~ \varphi(p) ~ )+\varphi(p)} ~ (mod ~ p)

定理1证明

b可表示为 k×φ(p)+r,r[0,φ(p) )k \times \varphi(p) + r , r \in [0,\varphi(p) ~ ) , 得 r=b mod φ(p)r = b ~ mod ~ \varphi(p)

于是 abak×φ(p)+r(aφ(p))k×ar1k×arab mod φ(p) (mod p)a^b \equiv a ^ {k \times \varphi(p) + r} \equiv (a ^ {\varphi(p)} ) ^ k \times a^r \equiv 1^k \times a^r \equiv a ^ {b ~ mod ~ \varphi(p)} ~ (mod ~ p)

例题:

UVA11327 Enumerating Rational Numbers

hint

每一个大于1的数贡献为 φ(a)\varphi(a) , 掐指一算

前20000位欧拉函数的和正好为12158598919,可以在很快时间内枚举出来


[POJ3696] The Luckiest number

hint

xx 个 8 可以写成 8(10x1)/98(10^x-1)/9

L8(10x1)9L \mid \frac{8(10^x-1)}{9} 等同于 9L8(10x1)9L \mid 8(10^x-1)

d=gcd(9L,8)d=\gcd(9L,8)

可以得到 gcd(9Ld,8d)=1\gcd(\frac{9L}{d},\frac{8}{d})=1

所以 9Ld,8(10x1)d\frac{9L}{d},\frac{8(10^x-1)}{d} 的共同因数存在于 9Ld\frac{9L}{d}10x110^x-1

所以得出 10x1 (mod 9Ld)10^x \equiv 1 ~ (mod ~ \frac{9L}{d})

gcd(10,9Ld)1\gcd(10,\frac{9L}{d}) \not =1 , 则模运算一定不等于1,则无解

x0x_0 为 使得式子成立的最小解,那么 10x01 (mod 9Ld)10^{x_0} \equiv 1 ~ (mod ~ \frac{9L}{d}) , 于是 10kx01 (mod 9Ld)10^{kx_0} \equiv 1 ~ (mod ~ \frac{9L}{d})

根据欧拉定理,10φ(p)1 (mod p)10^{\varphi(p)} \equiv 1 ~ (mod ~ p) , 所以 x0x_0φ(p)\varphi(p) 的约数

参考资料

  1. OI wiki (欧拉函数,欧拉定理 & 费马小定理) , 详情
  2. 算法竞赛进阶指南(0x33同余)
Author: cjh-hhz
Link: https://cjh-hhz.github.io/450d95e313bd.html/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.