码迷,mamicode.com
首页 > 其他好文 > 详细

线性求逆元

时间:2016-08-15 22:29:52      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

简介

逆元,简单的来说就是a?b1(modp),那么b就是a关于p的逆元。
正常的来说用扩展欧几里得来做。复杂度不是线性的。
但是如果所有的i≤p,有一个线性求逆元的方法。
正常的来说

方法

因为ip,所以考虑用i来表示p,并要求表示出来的所有数都能用p和i表示。
p=ki+bk=?pi?l=pmodi
那么ki+b0(modp)
因为要求的是i?1,所以需要把i?1独立起来,所以我们等式两边同时乘以i?1b?1
那么式子就可以变成kb?1+i?10
然后把可以求得i的逆元的数放到右边去。
i?1?k?b?1
然后再把k和b用p来表示。
i?1??pi??(pmodi)?1
设数组a[i]表示i的逆元
那么由上面的式子可以知道:
a[i]=??pi??a[pmodi]?1
所以a[i]??pi??a[pmodi]?1
把上面的东西优化一下
因为系数带p的在mod p意义下都视为0
a[i]??pi??a[pmodi]?1+p?a[pmodi]?1
所以
a[i](p??pi?)?a[pmodi]?1
为了方便记忆,式子可以改为
a[i](p??pi?)?a[p??pi??i]?1

线性求逆元

标签:

原文地址:http://blog.csdn.net/doyouseeman/article/details/52215008

(1)
(2)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!