欧氏分裂算法的余数

时间:2014-06-11 10:46:09

标签: javascript algorithm biginteger

我在自己的BigInteger库中使用JavaScript,我对mod函数的复杂性有疑问。

// r = big1 - (big2 * (big1/big2))
function mod(big1, big2){
return subs(big1, multiply(big2, divide(big1,big2))); 
}

1 个答案:

答案 0 :(得分:0)

// r = b1%b2

另一种方法是按部件操作模数(比如你的数字限制是每个数字9位数,并说b2 <100):

  1. 从b1的最左边数字开始,使用前9位数字构建一个数字并将其称为N.
  2. 计算N mod b2,给出00到99范围内的结果(记住例子是b2&lt; 100)。
  3. 通过将上述结果(步骤2)与b1的后7位数连接,构造一个新的9位数N.如果b1中剩余少于7位但至少有一位,则从上面的结果(步骤2)开始构造一个新的N,其数量少于9位,然后是b1的剩余数字
  4. 重复步骤2-3,直到b1的所有数字都已处理
  5. 最终结果是b1%b2。如果b2非常大,这将无效,但如果只有b1非常大,你可以将它视为一个字符串,用于算法。

    编码它应该很容易迭代,因为你可以预先知道迭代次数,甚至不需要递归。