Pagini recente » Cod sursa (job #2649484) | Cod sursa (job #2090989) | Cod sursa (job #842466) | Cod sursa (job #1044890) | Cod sursa (job #2588976)
#include <bits/stdc++.h>
#define PLEC fin.close(); fout.close(); return 0;
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
const int N(5005);
unordered_map<int64_t, int> M;
int dp[N][N], v[N], k, dv, nrd, pos;
int64_t n;
int main()
{
fin >> n >> k;
for (dv = 1; dv * dv < n; ++dv)
if (n % dv == 0)
v[++nrd] = dv, v[++nrd] = n / dv;
if (dv * dv == n)
v[++nrd] = dv;
sort(v + 1, v + nrd + 1);
for (int i = 1; i <= n; ++i)
M[v[i]] = i, dp[1][i] = 1;
for (int i = 2; i <= nrd; ++i) {
for (int j = i; j > 1; --j) {
dp[i][j] = dp[i][j+1];
if (v[i] % v[j] == 0)
dp[i][j] += dp[M[v[i] / v[j]]][j];
}
dp[i][1] = dp[i][2];
}
fout << dp[nrd][1] << '\n';
int i(2);
while (n != 1)
for (; i <= nrd; ++i)
if (n % v[i] == 0) {
dv = n / v[i];
pos = M[dv];
if (dp[pos][i] < k)
k -= dp[pos][i];
else {
fout << v[i] << ' ';
n = dv;
break;
}
}
PLEC
}