基本数论问题,mod的逆运算

 穷举的时间复杂度是O(N),比较不实际。
用辗转相除法的时间复杂度是O(logN)。


介绍一下吧:

先求简单一点的问题:A*X   mod   B   ==   1,A,B互质

现在假设A=5,   B=13。
对5,13辗转相除:
             
                  |   5   |   13   |
                  |       |         |
=>
                  |   5   |   13   |2 <--   2   =   13   /   5
                  |       |   10   | <--10   =   5   *   2
                  |---|----|
                          |     3   | <--   3   =   13   -   10
=>
  左右       1|   5   |   13   |2
  轮流         |   3   |   10   |
                  |---|----|
                  |   2   |     3   |
=>
                1|   5   |   13   |2
                  |   3   |   10   |
                  |---|----|
                  |   2   |     3   |1
                  |       |     2   |
                  |       |----|
                  |       |     1   |         <--   计算到1时停止

然后用(1,0)和(0,1)重复上面的步骤:
不变-->   1|1,0|0,1|2         <--   这个数不变
                  |2,1|2,0|  
                  |---|---|
                  |3,1|2,1|1         <--   (2,1)   =   (0,1)+(2,0)
                  |       |3,1|
                          |---|
                          |5,2|           <--   计算结果

那么,可以发现13*2-5*5=1,所以5*(-5)   mod   13   ==1。


至于A*X   mod   B   ==   C,可以这样求:

先对A,B辗转相除。如果A,B不互质,最后计算出的非0值会是d而不是1。
如果d不是C的约数:这个问题无解。
否则:A、B、C同时除以d,得A ',B ',C '。解A '*X   mod   B '   =   C '   就行了,其中A '和B '互质。
现在在A、B互质的条件下解X。
先用上面的方法求出A*X '   mod   B   ==   1的X ',那么所求的X就是X '   *   C   mod   B。

至此,题目解决。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值