TLE on #11~#20
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
bool flag;
int ans[1000005];
int f[1000005];
void dfs(int a, int b, int k, int d) {
if (k == d + 1) {
return ;
}
if (a == 1 && k == d && b > f[k - 1]) {
f[k] = b;
flag = 1;
if (!flag || b < ans[k]) {
memcpy(ans, f, sizeof(f));
}
return ;
}
int x = max(b / a, f[k - 1]) + 1;
int y = min({(d - k + 1) * b / a, INT_MAX / a, ans[d] - 1});
for (int i = x; i <= y; i++) {
f[k] = i;
int t = __gcd(b * i, a * i - b);
dfs((a * i - b) / t, (b * i) / t, k + 1, d);
}
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int x, y;
cin >> x >> y;
memset(ans, 0x3f, sizeof(ans));
int k = __gcd(x, y);
x /= k, y /= k;
for (int d = 1; d <= 200; d++) {
dfs(x, y, 1, d);
if (flag) {
for (int i = 1; i <= d; i++) {
cout << ans[i] << " ";
}
return 0;
}
}
return 0;
}