Hallo,
Ich beabsichtige folgende Rechnung mit JS ausführen zu lassen:
j = a^((p-1)/2) modulo p;
Ergibt:
j = Math.pow(a, (p-1)/2)%p;Allerdings, und das ist mein Problem, ergibt sich bei a=75 und p=167
für j = 104 - wobei das richtige Ergebnis 1 ist.
Was ist falsch - kann JS vielleicht nicht mit der großen Zahl umgehen?
Das Problem liegt nicht an den großen Zahlen, JS kann bis ~10^308 rechnen. Die Modulo-Division ermittelt den Rest einer ganzzahligen Division.
Fuer Dein Beispiel waere BCD-Arithmetik geeignet (Binary Coded Decimals). Mit den bc-Funktionen von PHP ist das so loesbar:
<?php
$a=75;
$p=167;
$j=bcmod(bcpow(strval($a),strval(($p-1)/2)),strval($p));
print $j; // 1
?>
MfG, Thomas