noch was:
Delphi-Quellcode:
Function tF_Haupt.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;
Delphi-Quellcode:
[DCC Fehler] Unit1.pas(176): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Warnung] Unit1.pas(176): W1023 Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
Diese jedoch geht:
Delphi-Quellcode:
Function tF_Haupt.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;
meine mit Bigint geht auch:
Delphi-Quellcode:
function tF_Haupt.mod_exp(basis,exponent,modulo:TBigInt):TBigInt;
var e:TBigInt;
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;