Pagini recente » Cod sursa (job #695378) | Cod sursa (job #395291) | Cod sursa (job #3212140) | Cod sursa (job #2882986) | Cod sursa (job #573554)
Cod sursa(job #573554)
#include <cstdio>
#include <vector>
#include <algorithm>
#define ll long long
#define maxn 3010
using namespace std;
vector <ll> v;
ll N;
int K, n, idx, dp[maxn][maxn];
int main ()
{
freopen ("desc.in", "r", stdin);
freopen ("desc.out", "w", stdout);
scanf ("%lld %d\n", &N, &K);
for (ll i = 2; i * i <= N; i++)
if (N % i == 0) {
v.push_back (i);
if (i * i != N)
v.push_back (N / i);
}
v.push_back (N);
sort (v.begin (), v.end ());
n = v.size ();
for (int i = 0; i < n; i++) {
idx = 0;
for (int j = n - 1; j >= 0; j--) {
dp[i][j] = dp[i][j + 1];
if (v[i] % v[j] == 0) {
while (v[idx] < v[i] / v[j])
++idx;
dp[i][j] += dp[idx][j];
}
if (i == j) dp[i][j] += 1;
}
}
printf ("%d\n", dp[n - 1][0]);
int ind = n - 1;
for (int i = 0; N > 1 && i < n; )
if (dp[ind][i] - dp[ind][i + 1] >= K) {
printf ("%lld ", v[i]);
N /= v[i];
if (N > 1)
while (v[ind] > N)
ind--;
} else {
K -= dp[ind][i] - dp[ind][i + 1];
i++;
}
return 0;
}