辗转相除法求模逆(C语言)

其实,一直就想写这篇博客的,因为上次在写RSA程序,我看了网上的资料都不够简洁,有的提到了方法,但是代码却不够简便,例如欧几里得扩展算法的矩阵形式,以及商的倒序求逆,方法众多,但是代码实现却感觉有点复杂。况且我也看了前人的博客,需要开辟空间对商进行存储。这次我就把我目前感觉最简单的求模逆方法分享给大家~有错误请大家多多指出!

问题:

求e关于模p的逆元d,即要求出整数d,使e * d mod p = 1 (或 ed+px=1),这里要求e与p互素。

方法:

这里是引用初等数论(严士健 第三版)第27页的辗转相除法的表格形式的辗转相除法。

首先我们先要引入概念:
对于二元一次不定方程的求解:
即 ax+by=1的求解方法,

ax+by=1,(a,b)=1
a=bq1 + r 1 , 0<r1 <b,
b=r1q2 + r 2 , 0<r2 <r1 ,
……
rn-2 =rn-1 qn + rn , 0<rn <rn-1 ,
rn-1 =rn qn+1 .

因为(a,b)=1,故rn =1
于是有 a[(-1)n-1Qn ]+b[(-1)nPn ]=1
P0 =1 , P1 =q1 ,Pk =qk Pk-1 +Pk-2 ,
Q0 =0 , Q1 =1,Qk =qk Qk-1 +Qk-2,
k=2,…,n.

由于我时间不是很多,我就不举具体例子了 ,防止大家视疲劳我还是手写吧。
在这里插入图片描述
直接上代码 ,代码思想就是我所列举的辗转相除法思想,具体证明过程有兴趣的朋友可以参考:《初等数论》(第三版)作者:闵嗣鹤 严士健
第一章ξ3定理1的证明过程 以及 第二章ξ1定理2的证明过程
(不过看到好像这么多观看量,我还是列出来吧~~)

数学证明:

定理1:若a,b是任意两个正整数,则
Qk a - Pk b = (-1)k-1 r

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值