Pagini recente » Cod sursa (job #3170532) | Cod sursa (job #545596) | Cod sursa (job #2358259) | Cod sursa (job #637744) | Cod sursa (job #2643080)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define endl '\n'
#define ll long long
#define pi pair<int, int>
#define f first
#define s second
const int mxn = 6720;
ll n, m, k;
ll a[mxn], dp[mxn];
unordered_map<ll, int> mp;
int main(){
freopen("desc.in", "r", stdin);
freopen("desc.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> m >> k;
for(ll i = 1; i * i <= m; i++){
if(m % i == 0){
a[n++] = i;
if(i * i != m) a[n++] = m / i;
}
}
sort(a, a + n);
for(int i = 0; i < n; i++) mp[a[i]] = i;
dp[0] = 1;
for(int i = 1; i < n; i++)
for(int j = n - 1; ~j; j--)
for(ll l = a[i]; mp.count(a[j] * l); l *= a[i]){
dp[mp[a[j] * l]] += dp[j];
}
cout << dp[n - 1] << endl;
k = dp[n - 1] - k + 1;
for(int i = 1, c = n - 1; i < n && k; i++){
for(int j = 0; j < n; j++)
for(ll l = a[i]; mp.count(a[j] * l); l *= a[i]){
dp[mp[a[j] * l]] -= dp[j];
}
for(; dp[c] < k; c = mp[a[c] / a[i]]){
k -= dp[c];
cout << a[i];
if(k) cout << " ";
}
}
cout << endl;
return 0;
}