现在开始天晴了!|

sunzz3183

园龄:5年2个月粉丝:10关注:25

欧拉函数及欧拉定理&逆元学习笔记

欧拉函数及欧拉定理&逆元学习笔记

——by sunzz3183


欧拉函数

定义

φ(n)=i=1n[gcd(n,i)=1]

根据容斥可得

φ(n)=ni=1k(11pi)

所以可得以下代码

inline int euler(int x){
	int res=x;
	for(int i=2;i*i<=x;i++)
		if(!(x%i)){
			res=res/i*(i-1);
			while(!(x%i))x/=i;
		}
	if(x>1)res=res/x*(x-1);
	return res;
}

筛法

原理

φ(n)=ni=1k(11pi)

所以:

  1. n 为质数的时候 φ(n)=n1
  • d=np 其中 pn 的最小质因子。
  1. pd 的某个质因子时,则 φ(n)=φ(d)×p

  2. pd 互质时,φ(n)=φ(d)×φ(p)

所以,欧拉函数为积性函数(当 xy 时, φ(xy)=φ(x)×φ(y)

代码

int cnt,prime[M],phi[N],mu[N];
bool is_p[N];
void init(int n){
	phi[1]=mu[1]=1;
	for(int i=2;i<=n;i++){
		if(!is_p[i])prime[++cnt]=i,phi[i]=i-1,mu[i]=-1;
		for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
			is_p[i*prime[j]]=1;
			if(!(i%prime[j])){
				phi[i*prime[j]]=phi[i]*prime[j];
				mu[i*prime[j]]=0;
				break;
			}
			phi[i*prime[j]]=phi[i]*(prime[j]-1);
			mu[i*prime[j]]=-mu[i];
		}
	}
}

重要公式:

(1)

d|nφ(d)=n

证明:

f(n)=d|nφ(d)

由筛法的原理1,2可知

φ(pk)=φ(p)×pk1=(p1)×pk1=pkpk1

对于

d|pkφ(d)

显然,d={p0,p1,p2,...,pk}。那么有

=i=0kφ(pi)=(i=1kpipi1)+1=pkpk1+pk1pk2+...+p1+1=pk

f(pk)=pk

f(ab)=d|abφ(d)=(d|aφ(d))×(d|bφ(d))=f(a)×f(b)

f(n)为积性函数。

f(n)=f(p1c1×p2c2×p3c3×...×pkck)=f(p1c1)×f(p2c2)×f(p3c3)×...×f(pkck)=p1c1×p2c2×p3c3×...×pkck=n

(2)

i=1nj=1n[gcd(i,j)=1]=i=1n(2j=1i[gcd(i,j)=1])1=2i=1nφ(i)1

可以使用前缀和,使得 O(1) 查询。

(2.5)

i=1nj=1mgcd(i,j)=i=1nj=1md|gcd(i,j)φ(d)=i=1nj=1md|i,d|jφ(d)=i=1nj=1md=1min(n,m)φ(d)[d|i][d|j]=d=1min(n,m)φ(d)i=1nj=1m[d|i][d|j]=d=1min(n,m)φ(d)ndmd

(3)

莫比乌斯反演(拓展)

i=1nj=1m[gcd(i,j)==1]=i=1nj=1md|gcd(i,j)μ(d)=i=1nd=1min(i,m)μ(d)min(i,m)d=d=1min(n,m)μ(d)ndmd

费马小定理&欧拉定理&扩展欧拉定理

同余

定义

如果

d|(ab)

则我们称

ab(modd)

性质

1.反身性:aa(modm)

2.对称性:若 ab(modm),则 ba(modm)

3.传递性:若 ab(modm)bc(modm),则 ac(modm)

4.同余式相加:若 ab(modm)cd(modm),则 a±cb±d(modm)

5.同余式相乘:若 ab(modm)cd(modm),则acbd(modm)

费马小定理

定义

对于一个整数 a 和 质数 p,如果满足

ap

则符合

ap11(modp)

欧拉定理

定义

费马小定理的广义。

对于两个整数 am,如果满足

am

则符合

aφ(m)1(modm)

逆元

定义

ab1modm

bamodm 意义下的逆元,同时,a 也为 bmodm 意义下的逆元。

任意整数 amodm 意义下的逆元记为 inv(a,m)

显然,逆元就是在 mod 某个数意义下的倒数,即

inv(a,m)=a1modm

求法

  1. 费马小定理求法(pPrime,ap

ap11(modp)ap2=1a(modp)inv(a,p)=ap2(modp)

  1. 欧拉定理求法(am

aφ(m)1(modm)aφ(m)1=1a(modm)inv(a,p)=aφ(m)1(modm)

  1. 线性求逆元(pPrime,ap

对于所有的 i<p,有一种线性求逆元(i1)的方法。

因为 i<p,所以可以用 i 表示 p,即

p=ki+b

ik+b0(modp)

等式两边同乘 i1,得

k+bi10(modp)

移项,分离处 i1,得

i1kb1(modp)

k=p/i,b=pmodii1(p/i)(pmodi)1(modp)i1(pp/i)(pmodi)1(modp)

因为 (pmodi)1 已经处理好了

所以可以线性处理

代码

inv[1]=1;
for(int i=2;i<=n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
  1. 线性求阶乘逆元

可以在组合数问题上发挥作用

显然

1(n1)!=n1n!

所以

fac[0]=inv[0]=1;
for(int i=1;i<=n;i++)
	fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2);
for(int i=n;i>=1;i--)
	inv[i-1]=inv[i]*i%mod;

扩展欧拉定理

ab{abmodφ(m)amab¬am,b<φ(m)abmodφ(m)+φ(m)¬am,bφ(m)modm

互质可以不要

ab{abb<φ(m)abmodφ(m)+φ(m)bφ(m)modm

本文作者:sunzz3183

本文链接:https://www.cnblogs.com/sunzz3183/p/17087498.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   sunzz3183  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
Live2D
欢迎阅读『欧拉函数及欧拉定理&逆元学习笔记』
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起