Pagini recente » Cod sursa (job #1821995) | Cod sursa (job #3240087) | Cod sursa (job #2316384) | Cod sursa (job #678561) | Cod sursa (job #2589025)
#include <bits/stdc++.h>
#define NMAX 10005
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
typedef long long ll;
int nrD[NMAX], dp[NMAX][NMAX];
unordered_map<ll, int> pz;
int main()
{
ll n, k;
fin >> n >> k;
int nr = 0;
for(ll d = 1; d * d < n; ++d)
if(n % d == 0)
nrD[++nr] = d, nrD[++nr] = n / d;
if(sqrt(n) * sqrt(n) == n)
nrD[++nr] = sqrt(n);
sort(nrD + 1, nrD + nr + 1);
for(int i = 1; i <= nr; ++i)
{
pz[nrD[i]] = i;
dp[1][i] = 1;
}
for(int i = 2; i <= nr; ++i)
{
for(int j = i; j >= 2; --j)
{
dp[i][j] = dp[i][j + 1];
if(nrD[i] % nrD[j] == 0)
dp[i][j] += dp[pz[nrD[i] / nrD[j]]][j];
}
dp[i][1] = dp[i][2];
}
fout << dp[nr][1] << '\n';
int i = 2;
while(n > 1)
{
for(; i <= nr; ++i)
if(n % nrD[i] == 0)
{
ll other = n / nrD[i];
if(dp[pz[other]][i] < k)
k -= dp[pz[other]][i];
else {
fout << nrD[i] << ' ';
n = other;
break;
}
}
}
return 0;
}