Delphi-获取可分割数的个数

Delphi-获取可分割数的个数,delphi,math,numbers,pascal,divide,Delphi,Math,Numbers,Pascal,Divide,我喜欢得到我的目标可以分割的数量。 所以在10的情况下,它应该返回4,因为10可以除以1,2,5和10。 我的尝试是这样,但它返回1?O.O function FindeTeiler(Zahl : Integer) : Integer; var Amount, i: Integer; begin Amount := 0; For i := 1 to Zahl do begin If (i mod zahl = 0) then begin Amou

我喜欢得到我的目标可以分割的数量。 所以在10的情况下,它应该返回4,因为10可以除以1,2,5和10。 我的尝试是这样,但它返回1?O.O

function FindeTeiler(Zahl : Integer) : Integer;
var
Amount, i: Integer;
begin
  Amount := 0;
   For i := 1 to Zahl do begin
      If (i mod zahl = 0) then
      begin
        Amount := Amount +1;
      end;
   end;
   Result := Amount;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('The number ' + Edit1.text + ' has ' + IntToStr(FindeTeiler(StrToInt(Edit1.text))) + ' dividers.');
end;

您需要计算zahl/i的剩余部分,但代码会计算i/zahl的剩余部分

因此,与其

i mod zahl = 0 
你需要测试一下

zahl mod i = 0
函数应该这样编写:

function FindeTeiler(Zahl: Integer): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Zahl do
    if zahl mod i = 0 then
      inc(Result);
end;

“因此,在10的情况下,它应该返回10”。你是说“它应该返回4”吗?另外,我认为你的
mod
语句是反向的。。。尝试
if(zahl mod 1)=0),然后
EDIT:Solved,其工作原理如下:如果您自己解决了问题,则不应发布代码图像。回答你自己的问题。顺便说一下,如果。。。然后
。我想我会在这里为zahl使用一个无符号类型。整数在某种程度上意味着当你输入一个负数时会发生一些有用的事情并从
2迭代到Abs(zahl div 2)
实际上,如果zahl非常大,从2迭代到Ceil(Sqrt(zahl))就足够了。@SirRufo您的优化需要满足zahl=1。@DavidHeffernan Oh,s**t。。。