问题描述
只是一个简单的问题。
我正在尝试用 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>