Einzelnen Beitrag anzeigen

tuxianer

Registriert seit: 16. Mai 2008
25 Beiträge
 
#50

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 22:27
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;
  Mit Zitat antworten Zitat