#include <bits/stdc++.h>
#define int long long
using namespace std;
int a, b, dep;
vector<int> v, ans;
bool f;
int gcd(int a, int b){
return b ? gcd(b, a % b) : a;
}
void dfs(int x, int a, int b, int l){
if(x == dep){
if(!a){
if(ans.empty() || v.back() < ans.back()){
ans = v;
}
f = 1;
}else if(a == 1){
if(b > v.back()){
v.push_back(b);
if(ans.empty() || v.back() < ans.back()){
ans = v;
}
v.pop_back();
f = 1;
}
}
return ;
}
for(int i = max(l + 1, b / a); a * i < (dep - x + 1) * b; i++){
int d = gcd(a * i - b, i * b);
v.push_back(i);
if(i <= 1e7 && (a * i - b) / d * 1e7 >= i * b / d){
dfs(x + 1, (a * i - b) / d, i * b / d, i);
}
v.pop_back();
}
}
signed main(){
cin >> a >> b;
int x = gcd(a, b);
a /= x, b /= x;
for(dep = 1; ; dep++){
dfs(0, a, b, 1);
if(f){
for(int x : ans){
cout << x << ' ';
}
break;
}
}
return 0;
}
结果
题解也没看懂