#include<cstdio>
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,maxd,ans[1010],bestans[1010];
int max(int a,int b){
return a>b?a:b;
}
int gf(int a,int b){
int res=b/a;
if(res*a>=b) return res;
else return res+1;
}
bool check(int d){
for(int i=d;i>=1;i--){
if(ans[i]!=bestans[i]){
if(bestans[i]==-1 || bestans[i]<ans[i]) return 1;
else return 0;
}
}
return 0;
}
int gcd(int a,int b){
if(b==0) return a;
else{
return gcd(b,a%b);
}
}
bool dfs(int d,int from,int a,int b){
if(d==maxd){
// system("pause");
if(b%a!=0){
return 0;
}
ans[d]=b/a;
// for(int i=1;i<=d;i++){
// printf("%d ",ans[i]);
// }
if(check(d)){
for(int i=0;i<=d;i++){
bestans[i]=ans[i];
}
}
return 1;
}
bool f=0;
from=max(from,gf(a,b));
for(int i=from;;i++){
if(b*(maxd-d+1)<=i*a) break;
ans[d]=i;
int b2=b*i;
int a2=a*i-b;
int g=gcd(a2,b2);
b2=b2/g;
a2=a2/g;
if(dfs(d+1,i+1,a2,b2)) f=1;
}
return f;
}
signed main() {
scanf("%d%d",&a,&b);
for(maxd=1;;maxd++) {
if(dfs(1,gf(a,b),a,b)){
break;
}
}
for(int i=1;i<=maxd;i++) printf("%d ",bestans[i]);
return 0;
}
代码整体是这样的。不知道哪里错了。有没有大佬指点一下QAQ
PS:勿喷,因为我是大蒟蒻