Pagini recente » Cod sursa (job #568981) | Cod sursa (job #2864175) | Cod sursa (job #2721657) | Cod sursa (job #370911) | Cod sursa (job #1597173)
#include <bits/stdc++.h>
using namespace std;
int d[4009][4009];
long long n , divs[4009];
map < long long , int > w;
int k , L , i , j , c , fk , p , d0;
int main()
{
freopen("desc.in" , "r" , stdin);
freopen("desc.out" , "w" , stdout);
scanf("%lld" , &n);
scanf("%d" , &k);
for (i = 2 ; 1LL * i * i <= n ; ++i)
if (n % i == 0)
{
L++;
divs[L] = i;
w[i] = L;
}
for (i = 2 ; 1LL * i * i < n ; ++i)
if (n % i == 0) ++L;
for (i = 2 ; 1LL * i * i < n ; ++i)
if (n % i == 0)
{
w[n / i] = L;
divs[L] = n / i;
L--;
}
for (i = 2 ; 1LL * i * i < n ; ++i)
if (n % i == 0) ++L;
L++;
divs[L] = n;
w[n] = L;
for (j = L ; j ; --j)
{
d[j][j] = 1;
for (i = j + 1 ; i <= L ; ++i)
{
d[j][i] = d[j+1][i];
if (divs[i] % divs[j] == 0)
d[j][i] += d[j][w[divs[i] / divs[j]]];
}
}
printf("%d\n" , d[1][L]);
p = 1;
while (n > 1)
{
fk = k;
for (i = p ; i <= L ; ++i)
if (n % divs[i] == 0)
{
d0 = d[i][w[n / divs[i]]];
if (d0 >= fk) break;
else fk -= d0;
}
for (i = p ; i <= L ; ++i)
if (n % divs[i] == 0)
{
d0 = d[i][w[n / divs[i]]];
if (k == fk) break;
k -= d0;
}
p = i;
n /= divs[i];
printf("%d " , divs[i]);
}
printf("\n");
return 0;
}