Pagini recente » Cod sursa (job #2444349) | Cod sursa (job #1586379) | Cod sursa (job #661982) | Cod sursa (job #1804068) | Cod sursa (job #2647051)
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#include <bits/stdc++.h>
using namespace std;
#define for_(i, s, e) for (int i = s; i < (int) e; i++)
#define for__(i, s, e) for (ll i = s; i < e; i++)
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> ii;
#define endl '\n'
int main() {
#ifndef ONLINE_JUDGE
//freopen("test.in", "r", stdin);
#endif
freopen ("desc.in", "r", stdin);
freopen ("desc.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
ll n, k; cin >> n >> k;
vector<ll> div;
for (ll i = 1; i*i <= n; i++) if (n % i == 0) {
if (i != 1) div.push_back(i);
ll j = n/i;
if (j != i) div.push_back(j);
}
sort(div.begin(), div.end());
int dc = div.size();
gp_hash_table<ll, int> id;
for_(i, 0, dc) id[div[i]] = i;
ll dp[dc+1][dc+1];
memset(dp, 0, sizeof(dp));
for_(i, 0, dc) {
dp[i][i] = 1;
for (int j = i-1; j >= 0; j--) {
if ((div[i] % div[j]) == 0) dp[i][j] += dp[id[div[i] / div[j]]][j];
dp[i][j] += dp[i][j+1];
}
}
cout << dp[dc-1][0] << endl;
for_(i, 0, dc) for_(j, 0, dc) {
if (j != dc-1) dp[i][j] -= dp[i][j+1];
if (j != 0) dp[i][j] += dp[i][j-1];
}
ll first = dc-1, prev = 0;
while (true) {
ll rem = (prev > 0 ? dp[first][prev-1] : 0);
if (rem == dp[first][dc-1]) break;
for_(i, prev, dc) if (i == dc-1 or dp[first][i]-rem >= k) {
cout << div[i] << " ";
k -= (i > 0 ? dp[first][i-1]-rem : 0);
first = id[div[first]/div[i]];
prev = i;
break;
}
}
cout << endl;
return 0;
}