蒙哥马利乘法

计算机的除法运算十分耗时,模运算会用到大量的除法运算,为了提高模运算的计算时间,提出了蒙哥马利乘法将模运算简化为移位或位运算。

蒙哥马利乘法:对任意正整数N,可选取R>N且gcd(N,R)=1,通过蒙哥马利乘法可以把mod N运算转换成mod R的运算。(将模运算转化为移位运算。比如将mod 97,转换为mod 100更利于心算,mod 251转换成mod 256更容易让计算机计算)

蒙哥马利乘法的核心是蒙哥马利约简:gcd(R,N)=1,R'是R在mod N下的逆元,RR'\equiv 1 mod N

N'是NN'\equiv -1 modR,N'不是N在mod R下的逆元

,但它和N^{-1}相关:N'=-N^{-1}mod R。

整数的蒙哥马利形式:

function REDC(T, R, N, N')
integer T in the range [0, RN-1]
output integer S in the range [0, N-1] and S = TR' mod N
m = ((T mod R)N') mod R
t = (T + mN) / R/*t is in range[0, 2N]*/
if t > N then
S = t - N
else
S = t
return S

假如要求解T mod N,需要找到一个m使得T+mN mod R\equiv 0,mod R计算相当于做位与运算。

t\equiv (T+mN)/R\equiv (T+mN)R'\equiv TR'+mNR'\equiv TR' mod N。(R若等于2^k的形式,这个式子就相当于做移位运算,t为最终所求结果)

计算蒙哥马利乘法,需要提前计算:r2:R^{2}\equiv r2 (mod N)

N':NN'\equiv -1 (mod R),N'=-N^{-1}(modR),N^{-1}可通过扩展欧几里得算法求解。

r1:r1=R (mod N)\equiv r2R'\equiv R(mod N)

a mod N:a(mod N)\equiv (aR)R'(mod N)

例如:a*b(mod N)

aR\equiv REDC(a*r2,R,N,N')modN

bR\equiv REDC(b*r2,R,N,N')modN

abR\equiv REDC(aR*bR,R,N,N')modN

ab\equiv REDC(abR,R,N,N')modN

四则运算都可以通过蒙哥马利乘法得出。

例题:1234mod97转换成mod 100的蒙哥马利乘法。

N=97,R=100,a=1234。由扩展的欧几里得算法得N^{-1}=33,N'=67,r1=100 mod 97 = 3。

T=r1*a=1234*3=3702。

将上述值代入上述代码过程即可求解t。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值