Pagini recente » Cod sursa (job #3321206) | Cod sursa (job #3342380) | Cod sursa (job #3352200) | Cod sursa (job #3307004) | Cod sursa (job #3327449)
#include <bits/stdc++.h>
using namespace std;
#define STDIO 0
#if STDIO
#define fin cin
#define fout cout
#else
ifstream fin("desc.in");
ofstream fout("desc.out");
#endif // STDIO
typedef long long ll;
ll divi[5002], nrd, d[5002][5002];
ll n, k, i, j;
int main() {
if(STDIO) ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin >> n >> k;
for(ll d = 1; d * d <= n; d++) {
if(n % d == 0) {
divi[++nrd] = d;
if(d * d != n) divi[++nrd] = n / d;
}
}
sort(divi + 1, divi + nrd + 1);
for(i = 1; i <= nrd; i++) d[1][i] = 1;
for(i = 2; i <= nrd; i++) {
int opd = 1;
for(j = i; j > 1; j--) {
d[i][j] = d[i][j + 1];
if(divi[i] % divi[j] == 0) {
while(opd <= i && divi[opd] != divi[i] / divi[j]) {
opd++;
}
if(opd <= i) d[i][j] += d[opd][j];
}
}
}
fout << d[nrd][2] << "\n";
ll nCur = nrd;
ll dCur = 2;
while(nCur > 1) {
ll ant = 0;
while(divi[nCur] > n) nCur--;
ll modTot = 0;
for(j = dCur; j < nrd; j++) {
modTot += d[nCur][j] - d[nCur][j + 1];
if(modTot >= k) {
dCur = j;
fout << divi[j] << " ";
n /= divi[j];
k -= ant;
break;
}
ant = modTot;
}
}
return 0;
}