这篇博客中的N'是质数N在模R上的逆,即:
N * N' ≡ 1 mod R
例子:
N=3457,R=2^16,
R^-1 = 2775 mod N
代码中,N_INV 即 N' == 12929,计算过程如下:
12929*3457 ≡1 mod 2^16
此函数的形参a,已经在蒙哥马利域里了,(乘过3310 = R mod N)
int16_t montgomery_reduce(int32_t a)
{
int32_t t;
int16_t u;
u = a * N_INV;
t = (int32_t)u * N;
t = a - t;
t >>= 16;
return t;
}