Pagini recente » Cod sursa (job #3367490) | Cod sursa (job #3367489) | Atasamentele paginii Profil y0rg | Cod sursa (job #3367492) | Cod sursa (job #3367497)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define vb vector<bool>
#define vc vector<char>
#define vt vector
#define pb push_back
#define cntn continue
const int N = 1e7+5;
const int INF = 1e12+5;
const int MOD = 1e9+7;
signed main() {
freopen("desc.in", "r", stdin);
freopen("desc.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int T; T = 1; while (T--) {
long long n, k; cin >> n >> k;
vt<ll> div;
for (ll i = 1; i*i <= n; i++) {
if (n%i == 0) {
div.pb(i);
if (i*i != n) div.pb(n/i);
}
}
short m = div.size();
div.pb(0);
sort(div.begin(), div.end());
vt<vt<short>> dres(m+1, vt<short>(m+1));
vt<vt<int>> dp(m+1, vt<int>(m+2));
for (short i = 1; i <= m; i++) {
short cr = 1;
for (short j = i; j <= m; j++) {
if (div[j]%div[i] != 0) cntn;
while (cr <= m && div[i]*div[cr] < div[j]) cr++;
dres[j][i] = cr;
}
}
for (short j = 1; j <= m+1; j++) dp[1][j] = 1;
for (short i = 2; i <= m; i++) {
for (short j = i; j >= 1; j--) {
if (dres[i][j] == 0) {
dp[i][j] = dp[i][j+1];
}
else {
dp[i][j] = dp[i][j+1]+dp[dres[i][j]][j];
}
}
}
cout << dp[m][1] << '\n';
int cr = 1;
for (int i = m; i > 1;) {
for (int j = cr; j <= m; j++) {
if (k > dp[i][j] - dp[i][j+1]) {
k -= dp[i][j]-dp[i][j+1];
}
else {
cout << div[j] << " ";
cr = j;
i = dres[i][j];
break;
}
}
}
}
}