最大公约数与最小公倍数

unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}


{求最大公约数
 算法: 假如 x > y, x mod y 取余数后,
 y 付给 x、余数付给 y,
 然后重复运算, 最后非 0 的余数就是最大公约数
}
function zdgys(x,y: Cardinal): Cardinal;
var
  n: Integer;
begin
  n := y;
  if x < y then
  begin
    y := x;
    x := n;
  end;


  while n > 0 do
  begin
    n := x mod y;
    x := y;
    if n > 0 then y := n;
  end;
  Result := y;
end;


{求最小公倍数
 算法: x * y div 它们的最大公约数
}
function zxgbs(x,y: Cardinal): Cardinal;
var
  m,n: Cardinal;
begin
  m := x * y;
  n := y;
  if x < y then
  begin
    y := x;
    x := n;
  end;


  while n > 0 do
  begin
    n := x mod y;
    x := y;
    if n > 0 then y := n;
  end;


  Result := m div y;
end;


{测试}
procedure TForm1.Button1Click(Sender: TObject);
const
  str = '%0:d 与 %1:d 的最大公约数是 %2:d'#13#10'%0:d 与 %1:d 的最小公倍数是 %3:d';
var
  x,y,a,b: Cardinal;
begin
  x := StrToIntDef(Edit1.Text, 1);
  y := StrToIntDef(Edit2.Text, 1);
  a := zdgys(x, y);
  b := zxgbs(x, y);
  ShowMessageFmt(str, [x,y,a,b]);
end;


end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值