2.搜索时,最小的数从大往小的搜
其他的从小往大搜
#include<bits/stdc++.h>
using namespace std;
long long n,m,h,ji[11],jians[11];
inline int g(long long a,long long b)
{
int c=a%b;
while(b)
{
c=a%b;
a=b;b=c;
}
return a;
}
inline bool cha(long long a,long long b,int shen)
{
if(a==0)
return 1;
if(a==1&&shen==1)
{
ji[shen]=b;return 1;
}
if(shen!=1&&shen!=2)
{
bool da=0;
for(int i=b/a+1;i<=b/a*shen;i++)
{
ji[shen]=i;
if(shen*b>=i*a&&ji[shen]>ji[shen+1])
{
int gcd=g(a*i-b,b*i);
if(cha((a*i-b)/gcd,b*i/gcd,shen-1)==1)
{
da=1;
if(shen==2&&(jians[1]==0||jians[1]>ji[1]))
for(int j=1;j<=h;j++)
jians[j]=ji[j];
}
}
}
return da;
}
if(shen==1||shen==2)
{
bool da=0;
for(int i=b/a*shen;i>=b/a+1;i--)
{
ji[shen]=i;
if(shen*b>=i*a&&ji[shen]>ji[shen+1])
{
int gcd=g(a*i-b,b*i);
if(cha((a*i-b)/gcd,b*i/gcd,shen-1)==1)
{
da=1;
if(shen==2&&(jians[1]==0||jians[1]>ji[1]))
for(int j=1;j<=h;j++)
jians[j]=ji[j];
}
}
}
return da;
}
}
int main()
{
cin>>n>>m;
h=1;
while(cha(n,m,h)==0)
{
h++;
}
for(int i=h;i>=1;i--)
cout<<jians[i]<<" ";
}
//低估这道题了,十点半没刷出来