如何在此库中使用模数函数?

时间:2015-12-24 13:53:57

标签: delphi pascal biginteger modulo

我在Pascal中使用此库用于Big Integers但我在使用modulo函数时遇到问题。有人可以帮忙吗?

我的代码:

a = b modulo(c);

这是图书馆的位置:http://www.delphiforfun.org/programs/library/big_integers.htm

{ ***************** Modulo ************* }
procedure TInteger.Modulo(const I2: TInteger);
{ Modulo (remainder after division) - by TInteger }
var
  k: int64;
  imod3: TInteger;
begin
  if high(I2.fDigits) = 0 then begin
    divmodsmall(I2.Sign * I2.fDigits[0], k);
    assignsmall(k);
  end
  else

  begin
    imod3:= GetNextScratchPad;
    DivideRem(I2, imod3);
    Assign(imod3);
    ReleaseScratchPad(imod3);
  end;
end;

为什么这不起作用?: 也为什么这不起作用?:

var
  P, Q, N, E, D,i: TInteger;
  Eing, Cout: TInteger;

begin
  E := 3;
  D := 27;
  N := 55;
  writeln(N.Modulo(E));

1 个答案:

答案 0 :(得分:3)

您下载的源代码附带了如何使用模数函数的示例。我建议你花时间阅读库附带的示例代码。如果你这样做,那么你就能够自己解决更多的问题。示例代码如下所示:

procedure Tbigints.ModBtnClick(Sender: TObject);
var
  i1,i2,i3:Tinteger;
begin
  i1:=TInteger.create(0);
  i2:=TInteger.create(0);
  Getxy(i1,i2);
  i1.modulo(i2);
  memo1.text:=i1.converttoDecimalString(true);
  i1.free;
  i2.free;
  alloclbl.caption:=format('Allocated memory: %d',[allocmemsize]);
end;

关键是modulo方法的作用。在上面的代码中,红利保存在i1中,除数保存在i2中。然后,您在modulo上调用i1作为参数传递i2。然后将操作结果放在i1中。因此,这种方法用除法模数代替被除数。