also Integer geht bei direkter Rechnung nicht ;(
666^4 sprenkt schonmal die Integergrenzen und auch 512 Bit werden gesprengt
falls ich mich jetzt nicht verschätzt hab, dann komm ich auf etwa 10.0000.000 Bits für 666^58613
vielleicht sollte ich mir doch noch überlegen auch noch 'en dynamischen BigInteger zu erstellen (wenn ich diesen soweit fertig hab
), denn so geht es nicht ;(
I := IntPower(666, 58613) mod 81079;
aber über die mod_exp-Funktion geht's
Delphi-Quellcode:
Function mod_exp(Basis, Exponent, Modulo: TBigInt): TBigInt;
Begin
Result := 1;
While Exponent > 0 do Begin
If Exponent.Data and $1 <> 0 Then
Result := (Result * Basis) mod Modulo;
Basis := (Basis * Basis) mod Modulo;
Exponent := Exponent div 2;
End;
End;
oder falls es wem so gefällt
Delphi-Quellcode:
Function mod_exp(Basis, Exponent, Modulo: TBigInt): TBigInt;
Begin
Result := 1;
If not Exponent.isNegative Then
While not Exponent.isZero do Begin
If Exponent.Data[0] and $1 <> 0 Then Begin
Result.Multiply(Basis);
Result.Modulus(Modulo);
End;
Basis.Multiply(Basis);
Basis.Modulus(Modulo);
Exponent.bShR(1);
End;
End;
Delphi-Quellcode:
Var i: TBigInt;
I := mod_exp(666, 58613, 81079);
S := I.asString;
also meine TBigInt bekommt auch 11771 raus und nicht
Zitat von
tuxianer:
Bei Größeren Zahlen kommt aber mist raus z.B.
666^58613 mod 81079=-38808
Rauskommen müsste aber: 49371.
so, jetzt muß ich nur noch etwas aufräumen und mir enlich mal 'nen Namen für mein Projekt einfallen lassen
(UCC paßt nicht mehr, da es einen kompletten Neuanfang darstellt und es sich nicht mehr hauptsächlich um Unicode-Funktionen handelt)
'nen Teil des Projekts hatte ich da mal gepostet
http://www.delphipraxis.net/internal...=879295#879295
nur TBigInt fehlt dort noch, da ich hiermit erst letzte Woche begonnen hab.
(OK, die Grundidee hatte ich schonmal im UCC versucht umzusetzen)
Ach ja, an die Rechenleistung wie vom
DECMath werd ich nie rankommen, aber das hab ich auch nich ernsthaft vor ... aber zumindestens 'ne leicht zu nutzend Bibo sollte schon rauskommen
ich beeil mich auch ... versuch bis Ende der Woche was Neues hochzuladen