Ich muss modulare Potenzierung auf ziemlich großen Zahlen auf Python3 und Javascript durchführen. Ich habe Funktionen, die die Aufgabe erledigen, aber sie geben mir unterschiedliche Ergebnisse.Warum modulare Potenzfunktionen in Python und Javascript für große Zahlen unterschiedlich funktionieren?
Python (alle drei arbeiten in der gleichen Art und Weise):
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
und jetzt JavaScript (beide Funktionen in der gleichen Art und Weise arbeiten):
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
Und wenn ich darüber hinaus verwendet this service mit meinen Zahlen, ich
Warum passiert das dies auch 138693107570. bekam? Ich bin mir nicht einmal sicher, welche Variante jetzt korrekt ist. Bei kleineren Zahlen ergeben die Funktionen jedoch identische Ergebnisse.
Ist es irgendwie möglich, das gleiche Ergebnis von den Funktionen zu bekommen? Es ist gar nicht so wichtig, dass das Ergebnis mathematisch korrekt ist, die Ergebnisse sollten mindestens gleich sein.
Könnten Sie bitte erklären, warum das passiert? Ist es das Funktionsdesign? Für mich scheinen Funktionen in beiden Sprachen identisch zu sein.
Gibt es eine Möglichkeit, das gleiche Ergebnis von den Funktionen beider Sprachen zu erhalten?
Danke für die Klarstellung! Gibt es eine Möglichkeit, die gleichen Ergebnisse für die modulare Exponentiation zu erhalten? –
@DenisYakovenko: Um es richtig zu machen, möchten Sie eine Javascript-Bibliothek, die Ganzzahlen mit beliebiger Genauigkeit bietet. Alternativ sagen Sie, dass es Ihnen nicht wichtig ist, dass die Ergebnisse korrekt sind. Das ist eine wirklich merkwürdige Sache, die ich nicht interessiert, und ich bin mir nicht sicher, wie sehr ich dir glaube, aber in diesem Fall könntest du einfach für beide Sprachen "0 zurückgeben". – user2357112
Ich meine, ich fühlte, dass ich entweder mit dem Ergebnis von javascript oder Python in Ordnung wäre, aber sie mussten auf beiden Seiten gleich sein (138693107570 oder 124912252967 in diesem Fall). –