我需要在python3和javascript上對相當大的數字執行模冪運算。我有完成這項任務的功能,但他們給了我不同的輸出。爲什麼模塊化指數函數在Python和Javascript中以大數字的方式工作不同?
的Python(全部以同樣的方式三個工作):
pow(176672119508, 55, 200000023499)
def expmod_iter(a,b,c):
x = 1
while(b>0):
if(b&1==1): x = (x*a)%c
a=(a*a)%c
b >>= 1
return x%c
def pow_mod(x, y, z):
number = 1
while y:
if y & 1:
number = number * x % z
y >>= 1
x = x * x % z
return number
# The result is always 124912252967
現在的JavaScript(這兩種功能以相同的方式工作):
function powMod(x, y, z) {
let number = 1;
while (y) {
if (y & 1) {
number = number * x % z;
}
y >>= 1;
x = x * x % z;
}
return number;
}
function expmod_iter(a, b, c) {
let x = 1;
while (b > 0) {
if (b & 1 === 1) {
x = (x * a) % c;
}
a = (a * a) % c;
b >>= 1
}
return x % c;
}
console.log(powMod(176672119508, 55, 200000023499));
console.log(expmod_iter(176672119508, 55, 200000023499));
// The result is always 138693107570
而且,當我用this service有我的號碼,我也得到了138693107570.
爲什麼會出現這種情況?我甚至不確定現在哪種變體是正確的。但是,對於較小的數字,這些功能會給出相同的結果
是否有可能以某種方式從函數中獲得相同的結果?即使結果在數學上是正確的,結果也應該至少是相同的。
你能解釋爲什麼會發生這種情況嗎?它是功能設計嗎?對我來說,兩種語言的功能似乎都是一樣的。
有沒有辦法從兩種語言的函數中獲得相同的結果?
謝謝澄清!有沒有辦法獲得相同的模數求冪的結果? –
@DenisYakovenko:要做到這一點,你會想要一個提供任意精度整數的Javascript庫。或者,你說你不關心結果是否正確。這是一件很不奇怪的事情,我不確定我有多相信你,但是在這種情況下,你可以只爲兩種語言返回0。 – user2357112
我的意思是我覺得我可以與javascript的結果或Python的結果一致,但是它們必須在兩側都是相同的(在這種情況下,是138693107570或124912252967)。 –