计算机的除法运算十分耗时,模运算会用到大量的除法运算,为了提高模运算的计算时间,提出了蒙哥马利乘法将模运算简化为移位或位运算。
蒙哥马利乘法:对任意正整数N,可选取R>N且gcd(N,R)=1,通过蒙哥马利乘法可以把mod N运算转换成mod R的运算。(将模运算转化为移位运算。比如将mod 97,转换为mod 100更利于心算,mod 251转换成mod 256更容易让计算机计算)
蒙哥马利乘法的核心是蒙哥马利约简:,R'是R在mod N下的逆元,。
N'是,N'不是N在mod R下的逆元
,但它和相关: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使得,mod R计算相当于做位与运算。
。(R若等于2^k的形式,这个式子就相当于做移位运算,t为最终所求结果)
计算蒙哥马利乘法,需要提前计算:r2:
N':可通过扩展欧几里得算法求解。
r1:
a mod N:
例如:
四则运算都可以通过蒙哥马利乘法得出。
例题:转换成mod 100的蒙哥马利乘法。
N=97,R=100,a=1234。由扩展的欧几里得算法得,N'=67,r1=100 mod 97 = 3。
T=r1*a=1234*3=3702。
将上述值代入上述代码过程即可求解t。