javascript 数字太大无法取模
javascript number too big for modulo
只是一个简单的问题。
我正在尝试用 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,b,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>
只是一个简单的问题。
我正在尝试用 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,b,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>