对于经典的面试问题“如何在没有乘法运算符的情况下执行整数乘法?”,最简单的答案当然是用C语言编写的以下线性时间算法:{
for (int i = 1; i < multiplier如果我们利用向左移位等同于将2乘以被移位的位数的幂的特性,我们可以将位移位到最接近的2的幂,并使用我们之前的算法从那里开始相加。
我正在为数论中的一个研究项目编写一些C代码,它需要用许多不同的模块用模块化算法进行大量操作。简单地说:我需要多次执行(a * b) % n操作。我的问题是:使用Montgomery模乘(只使用加法和乘法)而不是C模运算符% (它翻译成a % n = a - n*(a / n)并使用除法)会带来更快的执行速度吗?更新:一方面,根据保罗·奥格尔维(见下面的评论),(a * b) % n需要一个乘法和一个除法。另一方面,Montgomery乘法需要(忽略将操作数转换和转换回Montg