⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 埃及分数 .pas

📁 著名问题:埃及分数 给出一个数n
💻 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 + -