Zitat von
tuxianer:
Hallo,
ich habe jetzt den Code implementiert:
Delphi-Quellcode:
function tform1.mod_exp(basis,exponent,modulo:integer):int64;
var e:Integer;
begin
e:=1;
while (exponent>0) do begin
if (exponent mod 2 > 0) then e:=(e*basis) mod modulo;
basis:=(basis*basis) mod modulo;
exponent:=exponent div 2;
end;
result:=e;
end;
Bei Größeren Zahlen kommt aber mist raus z.B.
666^58613 mod 81079=-38808
Rauskommen müsste aber: 49371.
Woran kann das liegen? Mit kleineren Zahlen gehts 1a!
Das liegt daran, daß 81079* 81079 = 6573804241 > 2^31 ist. Mach alle Variablen int64, dann geht's.
Gruß Gammateser