乘法逆元
逆元作用
用于对于除法的取模运算,下面给出关于除一个数变成乘上他的逆元,在模意义下结果不变的证明:
证明:ab%p=a∗b−1%p
b∗b−1≡1(modp)b∗b−1%p=1ab%p=ab∗1%p=ab∗b∗b−1%p=a∗b−1%p
证毕
一.单个数逆元求解方法
-
扩展欧几里得
-
欧拉函数求解:
若 a⊥p,则有 a∗aϕ(p)−1≡1(modp)
-
费马小定理:
若 a⊥p ,且p为质数,则有 a∗ap−2≡1(modp)
二.线性求逆
-
用处:用于求出1~n,1<=n<=p 每一个数在模 p 的意义下的逆元,时间复杂度为 O(n)
-
算法:
设模数 p=k∗i+r,r<i,i∈1,2,3...,p−1,在模 p 的意义下,可以得到k∗i+r≡0(modp)
∵i−1∗r−1≡i−1∗r−1(modp)相乘可以得到:
(k∗i+r)∗i−1∗r−1≡0(modp)⇒k∗i∗i−1∗r−1+i−1∗r∗r−1≡0(modp)⇒k∗r−1+i−1≡0(modp)⇒i−1≡−k∗r−1(modp)∵k=⌊pi⌋,r=p%i⇒i−1≡−⌊pi⌋∗(p%i)−1(modp)⇒i−1≡(p−⌊pi⌋)∗(p%i)−1(modp)∴i−1=(p−p/i)∗(p%i)−1%p又∵r<i∴在求i−1时,已经将r−1即(p%i)−1计算出来,由此可以线性求逆元(1)
注:(1)这一步是为了保证正数,在模p的意义下加一个p没有任何变化
三.离线逆元
问题
对于给定的整数a1,a2,a3,..,an,求其在模 p 意义下的逆元,其中p 为质数
-
首先证明逆元是完全积性的,及:a−1∗b−1≡(a∗b)−1(modp)
证明:
a∗a−1≡1(modp)b∗b−1≡1(modp)∴a∗b∗a−1∗b−1≡1(modp)又∵(a∗b)∗(a∗b)−1≡1(modp)∴a−1∗b−1≡(a∗b)−1(modp)
-
设per=n∏i=1ai,易得 per−1=n∏i=1a−1i
∴a−1i=peri−1∗per−1i,per−1i=ai+1∗per−1i+1
由此就可以依次推出每一个数的乘法逆元,代码比较好写,所以就不放了
-
奇技淫巧
令 toi=i∏j=1aj,backi=n∏j=iaj,per−1=n∏i=1a−1i
∴a−1i=per−1∗toi−1∗backi+1
这个也可以用来求逆元
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】