javascript 数字对于模来说太大了

问题描述

只是一个简单的问题。

我正在尝试用 js 计算一些东西:

print(pow(49,37) % 77)

这将打印 22 而不是它应该是什么 (14)。

我只是不确定这是否是因为它太大而无法准确计算,或者我是否遗漏了某些东西并且只是做错了。

如果它太大是原因,我该如何解决它? (顺便说一下,把它改成 BigNumber 并不能解决问题)

谢谢:)

解决方法

这是密码学中的常见操作 您可以做的是自己迭代计算功率,并在每次迭代时减少它mod 77。下面的函数 powmod 是你必须做的,剩下的就是让代码片段具有交互性。

function powmod(a,b,mod){
  if(b < 1){
    return 1;
  }
  const t = powmod(a,b >> 1,mod);
  if(b & 1){
    return (a * t * t) % mod;
  }else{
    return (t * t) % mod;
  }
}

const a = document.getElementById('a');
const b = document.getElementById('b');
const c = document.getElementById('c');
const d = document.getElementById('d');
function update(){
  d.value = powmod(parseInt(a.value),parseInt(b.value),parseInt(c.value))
}

[a,c].map(e => e.addEventListener('change',update))
update()
pow(<input type="number" min="0" max="999999" step="1" id="a" value="49">,<input type="number" min="0" max="999999" step="1" id="b" value="37">) % 
<input type="number" min="0" max="999999" step="1" id="c" value="77"> = 
<input type="number" min="0" max="999999" step="1" id="d" disabled>