Viết chương trình tách số nguyên dương A (A < 200) thành tổng của hai số nguyên dương x và y sao cho ước chung lớn nhất d của x và y là lớn nhất trong các cách phân tích có được
2 câu trả lời
uses crt;
var i,a,x,y:longint;
function ucln(a,b:longint):longint;
begin
while a<>b do
if a<b then b:=b-a else a:=a-b;
ucln:=a;
end;
begin
clrscr;
repeat
write('A= ');readln(a);
until a<200;
x:=1; y:=1;
for i:=1 to a-1 do
if ucln(i,a-i)>ucln(x,y) then begin x:=i; y:=a-i; end;
writeln(x,' ',y);
readln
end.
*Dùng chương trình con (hàm UCLN)
program tong_UCLN;
uses crt;
var A,n,m,max,i:integer;
function UCLN(x,y:integer):integer;
begin
while x<>y do
if x>y then x:=x-y else y:=y-x;
UCLN:=x;
end;
BEGIN
clrscr;
write('Nhap A: '); readln(a);
n:=1; m:=a-1; max:=1;
for i:=2 to a div 2 do
if UCLN(i,a-i)>=max then
begin
max:=UCLN(i,a-i);
n:=i; m:=a-i;
end;
writeln(n,' ',m);
write('UCLN la: ',max);
readln;
end.
*Không dùng chương trình con.
program tong_UCLN;
uses crt;
var A,n,m,max,x,y,i:integer;
BEGIN
clrscr;
write('Nhap A: '); readln(a);
n:=1; m:=a-1; max:=1;
for i:=2 to a div 2 do
begin
x:=i; y:=a-i;
while x<>y do
if x>y then x:=x-y else y:=y-x;
if x>max then
begin
max:=x;
n:=i; m:=a-i;
end;
end;
writeln(n,' ',m);
write('UCLN la: ',max);
readln;
end.