Pagini recente » Cod sursa (job #1338139) | Cod sursa (job #2447798) | Cod sursa (job #105362) | Cod sursa (job #326166) | Cod sursa (job #1250233)
#include <fstream>
#include <algorithm>
#define DIM 3005
#define infile "desc.in"
#define outfile "desc.out"
using namespace std;
ifstream f(infile);
ofstream g(outfile);
long long Divisors[DIM];
int D[DIM][DIM];
long long n, k;
int main() {
f >> n >> k;
long long nr_divisors = 0, i;
Divisors[0] = 1;
for (i = 2; i * i < n; ++i)
if (n % i == 0)
Divisors[++nr_divisors] = i, Divisors[++nr_divisors] = n / i;
if (i * i == n)
Divisors[++nr_divisors] = i;
Divisors[++nr_divisors] = n;
std::sort(Divisors, Divisors + nr_divisors + 1);
for (i = 1; i <= nr_divisors; ++i)
D[0][i] = 1;
for (i = 1; i <= nr_divisors; ++i) {
long long pos = 0;
for (long long j = nr_divisors; j >= 1; --j) {
D[i][j] = D[i][j + 1];
if (Divisors[i] % Divisors[j] == 0) {
for (; Divisors[pos] < Divisors[i] / Divisors[j]; ++pos);
D[i][j] += D[pos][j];
}
}
}
g << D[nr_divisors][1] << "\n";
long long j = 1;
for (i = nr_divisors; i >= 1;) {
long long pos = nr_divisors;
for (; j <= nr_divisors; ++j) {
if (Divisors[i] % Divisors[j] == 0) {
for (; Divisors[pos] > Divisors[i] / Divisors[j]; --pos);
if (D[pos][j] < k)
k -= D[pos][j];
else {
g << Divisors[j] << " ";
i = pos;
break;
}
}
}
}
return 0;
}
//Trust me, I'm the Doctor!