Simon: Rechenfehler

Beitrag lesen

Hallo ihr zwei,

Das Problem liegt nicht an den großen Zahlen, JS kann bis ~10^308 rechnen. Die Modulo-Division ermittelt den Rest einer ganzzahligen Division.

IMHO liegt es sehr wohl an den großen Zahlen. 75^167 ist ganz grob 10^300, in dem Bereich kann JavaScript zwar noch rechnen, aber nicht mit Genauigkeit 1. Vielmehr wird es ungefähr die ersten 30 (wenn überhaupt) Stellen der Zahl speichern und den Rest als 10er-Potenz, genau wie bei floats. Die Modulo-Operation muß also scheitern, weil die entscheidenden letzten 270 Stellen der Zahl (*g*) gar nicht bekannt sind.
Als Lösung fällt mir nur ein, den Ausdruck mathematisch aufzubrechen.

z.B. 30^100 mod 999 == ((30x30x30)^33 x 30) mod 999; 30x30x30 == 27000; 27000 mod 999 == 27;
=> ((30x30x30)^33 x 30) mod 999 == (27^33 x 30) mod 999 usw.

Das ist ein bißchen Kopfarbeit, aber machbar ;)

Simon