【转】逆元的几种求法

http://hi.baidu.com/gzh19950711/item/9f1e6adfe8a8d037e3108f82


 定义 a * x = 1(mod p), 求x

1、扩展欧几里德:

   令ax + py = 1

Gcd的本质就是进行迭代,不断缩小范围。

不详细讲。。参考:http://baike.baidu.com/view/1478219.htm

 

2、根据费马小定理:若(a,p)互质,且p为质数:

         则 a ^ (p – 1)= 1 (% p)

         所以x = a ^ (p- 2) (% p)

         快速幂求之,查询log(n),常数比扩展欧几里德稍大

 

3、O(n)预处理-O(1)询问

         预处理1-n关于p的逆元:(n < p)

         假设已经预处理了1-i-1的逆元,j的逆元设为F[j]

         令p = x * i –y ( 0 < y < i)

         X* i = y (mod p)

         X* F[y] * i = y * F[y] = 1(mod p)

         所以i的逆元是F[i] = X* F[y]

         这样就可以O(n)的时间预处理了。

 

4、还有一种方法:

逆元函数是完全积性的。。所以求所有质数的逆元即可,预处理复杂度是O(n / logn * logn) = O(n)。。。


 参考贾志鹏WC论文

         




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值