Pagini recente » Cod sursa (job #2453776) | Cod sursa (job #287974) | Cod sursa (job #3290759) | Cod sursa (job #1545859) | Cod sursa (job #3149459)
#include <bits/stdc++.h>
using namespace std;
unordered_map<long long, int> mp;
const int nax = 4255;
long long dp[nax + 5][nax + 5];
void solve() {
ifstream cin ("desc.in");
ofstream cout ("desc.out");
long long n, k;
cin >> n >> k;
vector<long long> divs;
for (long long i = 1; i * i <= n; ++i) {
if (n % i == 0) {
divs.push_back(i);
if (i * i != n) {
divs.push_back(n / i);
}
}
}
sort(divs.begin(), divs.end());
for (int i = 0; i < divs.size(); ++i) {
mp[divs[i]] = i;
}
for (int i = 0; i < nax; ++i) {
dp[0][i] = 1;
}
for (int i = 1; i < divs.size(); ++i) {
for (int j = i; j > 0; --j) {
if (divs[i] % divs[j] == 0) {
long long comp = divs[i] / divs[j];
dp[i][j] += dp[mp[comp]][j];
}
dp[i][j - 1] += dp[i][j];
}
}
cout << dp[divs.size() - 1][0] << '\n';
int it =0, from = 1;;
while (n > 1) {
int sum = 0, prev = 0;
for (int j = from; j < nax; ++j) {
int have = dp[mp[n]][j] - dp[mp[n]][j + 1];
sum += have;
if (sum >= k) {
from = j;
cout << divs[j] << ' ';
k -= prev;
n /= divs[j];
break;
}
prev = sum;
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
}