📄 埃及分数 .pas
字号:
program fenshu;
var
x:array[0..1000] of int64;
ans:array[0..1000] of int64;
i,j,a,b:longint;
k,num,min:int64;
flag:boolean;
function gcd(x,y:int64):int64;
begin
if x=0 then exit(y);
if y=0 then exit(x);
if x>y then exit(gcd(x mod y,y));
if x<y then exit(gcd(x,y mod x));
end;
procedure solve(a,b,last,n:int64);
var
i,j,k:longint;
s,e,p,q,t:int64;
begin
if n=1 then
begin
if (a<>1) or (b=last) then exit;
flag:=true;
if b<min then
begin
min:=b;
x[num]:=b;
ans:=x;
end;
exit
end;
if b mod a=0 then s:=b div a else s:=b div a+1;
e:=n*b div a;
if s<=last then s:=last+1;
for k:=s to e do
begin
q:=a*k-b;
p:=b*k;
t:=gcd(p,q);
x[num-n+1]:=k;
solve(q div t,p div t,k,n-1);
end;
end;
begin
readln(a,b);
for i:=1 to maxlongint do
begin
num:=i;
min:=maxlongint;
solve(a,b,0,i);
if flag then break;
end;
write(ans[1]);
for i:=2 to num do
write(' ',ans[i]);
writeln;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -