PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Modulo für grosse Zahlen


mrdigital
2004-02-03, 20:29:47
Heo ich suche einen Algorithmus, um modulo von sehr grossen Zahlen berechnen zu können, 1024bit Zahlen würd ich gern verwurschten. Gibts da überhaupt Alternativen zu dem "klassischen", wenn a mod b = x, a - (a / b) * b = x mit "/" im Sinne einer ganzzahligen Division ist?
Danke !

zeckensack
2004-02-03, 20:58:09
*nachdenk*

Modulo (bzw Integerdivision inklusive Rest geht ja ganz primitiv auch so:type dividend=...;
type divisor=...;

if (divisor==0) error();

type quotient=0;
type remainder=0;

type temp=dividend;
while (temp>=divisor)
{
temp-=divisor;
++quotient;
}
remainder=temp;
Damit das ganze schnell genug ist, sollte der Dividend möglichst klein sein. Für die reine Rest-Berechnung kann man ihn vielleicht vorher reduzieren, indem man immer schrittweise kleinere Zweierpotenzen des Divisors abzieht. Man darf dabei natürlich nichts abziehen, was grösser als der Dividend ist ... das sollte IMO aber durchaus beherrschbar sein.

Ungetestet:
if (divisor<dividend)
{
//Dividend reduzieren
type delta=divisor;
while ((2*delta)<dividend) delta*=2;
while (delta>divisor)
{
dividend-=delta;
do
{
delta>>=1;
} while ((delta>dividend)&&(delta!=0));
}
}
//jetzt den Rest ausrechnen

Gast
2004-02-04, 18:26:45
TAoCP 2