关闭

乘法逆元+线性求mod p的所有数逆元

335人阅读 评论(0) 收藏 举报
分类:

http://blog.csdn.net/acdreamers/article/details/8220787


逆元存在的

求单个逆元,一般用快速冪或者扩展欧几里得算法,复杂度为log(p)。

若是递推求解所有逆元,复杂度为线性。







http://blog.miskcoo.com/2014/09/linear-find-all-invert

[数论]线性求所有逆元的方法

前几天在看 lucas 定理的时候发现要求 1, 2,,p1modp1, 2,⋯,p−1modp 的逆元,然后就看到了一个 Θ(n)Θ(n) 的做法发现太神了,虽然想起来是挺简单的

这个做法实际上是这样的,首先 111(modp)1−1≡1(modp)

然后我们设 p=ki+r, r<i, 1<i<pp=k⋅i+r, r<i, 1<i<p

再将这个式子放到modpmodp 意义下就会得到

ki+r0(modp)k⋅i+r≡0(modp)

两边同时乘上 i1r1i−1⋅r−1 就会得到

kr1+i1i1i10kr1pi(pmodi)1(modp)(modp)(modp) k⋅r−1+i−1≡0(modp)i−1≡−k⋅r−1(modp)i−1≡−⌊pi⌋⋅(pmodi)−1(modp) 

于是就可以从前面推出当前的逆元了,代码也就一行



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38261次
    • 积分:1582
    • 等级:
    • 排名:千里之外
    • 原创:118篇
    • 转载:54篇
    • 译文:0篇
    • 评论:0条