Thomas Meinike: Rechenfehler

Beitrag lesen

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

--
SVG - Learning By Coding
http://svglbc.datenverdrahten.de/