Pagini recente » Cod sursa (job #2648539) | Cod sursa (job #2807039) | Cod sursa (job #2445904) | Cod sursa (job #1090769) | Cod sursa (job #2098665)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
long long n, k;
long long a[5002];
long long d[5002][5002];
int NR;
const int MOD = 100007;
int main()
{
freopen("desc.in", "r", stdin);
freopen("desc.out", "w", stdout);
scanf("%lld%lld", &n, &k);
a[++NR] = n;
for(int i = 2; 1LL * i * i <= n ; ++i){
if(n % i == 0){
if(i != n / i) a[++NR] = n / i;
a[++NR] = i;
}
}
sort(a + 1, a + NR + 1);
for(int j = 1; j <= n ; ++j)
d[0][j] = 1;
for(int i = 1; i <= NR ; ++i){
int l = 1;
for(int j = NR; j >= 1 ; --j){
d[i][j] = d[i][j + 1];
if(a[i] % a[j] == 0){
while(a[l] < a[i] / a[j]) ++l;
if(a[l] > a[i] / a[j]) --l;
d[i][j] += d[l][j];
}
}
}
printf("%d\n", d[NR][1]);
int i = NR, j = 1;
while(n > 1 && i > 0){
while(k > d[i][j] - d[i][j + 1]) k = k - d[i][j] + d[i][j + 1], ++j;
printf("%lld ", a[j]);
while(i > 0 && a[i] > n / a[j]) --i;
n = a[i];
}
return 0;
}