#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long int ans[10009];//相乘要long long;
long long int now[10009];
long long int flag[10009];
long long int finish=0;
long long int deep=0;
long long int search(long long int a,long long int b)
{
if(b==0)return a;
return search(b,a%b);
}
long long int a,b;
void dfs(long long int p,long long int q,long long int l,long long int u)
{
if(l==deep)
{
if(p==1&&q<ans[deep]&&q!=u)
{
now[deep]=q;
for(int i=1;i<=deep;i++)
ans[i]=now[i];
finish=1;
}
return;
}
for(int i=u+1;;i++)
{
if(p*i<q)continue;
if(p*i>=(deep-l+1)*q)break;//剪枝要完整;
long long int pp=p*i-q;
long long int qq=q*i;
long long int b=search(pp,qq);
now[l]=i;
dfs(pp/b,qq/b,l+1,i);
now[l]=0;
}
}
int main()
{
scanf("%d%d",&a,&b);
int lll=search(a,b);
while(finish==0)
{
memset(now,0,sizeof(now));
deep++;
ans[deep]=0x7fffffff;
dfs(a/lll,b/lll,1,0);
}
for(int i=1;i<=deep;i++)
printf("%d ",ans[i]);
return 0;
}
1444:埃及分数
最新推荐文章于 2021-12-08 13:26:40 发布