Pagini recente » Cod sursa (job #2228444) | Cod sursa (job #236279) | Cod sursa (job #2728809) | Cod sursa (job #1603084) | Cod sursa (job #750095)
Cod sursa(job #750095)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in("descompuneri.in");
ofstream out("descompuneri.out");
const int N = 3000;
vector<long long> v;
long long n;
int k, t, d[N][N];
int main() {
int i,j;
in >> n >> k;
for(i = 2; i*i <= n; ++i)
if(!(n % i)) {
v.push_back(i);
if(i*i != n)
v.push_back(n / i);
}
v.push_back(n);
sort(v.begin(), v.end());
for(i = 0; i!=v.size(); ++i) {
t = 0;
for(j = v.size() - 1; j >= 0; --j) {
d[i][j] = d[i][j + 1];
if(i == j)
d[i][j] += 1;
if(v[i] % v[j])
continue;
while(v[t] < v[i] / v[j])
++t;
d[i][j] += d[t][j];
}
}
out << d[v.size() - 1][0] << "\n";
t = v.size() - 1;
for(i = 0; n != 1 && i!=v.size();) {
if(d[t][i] - d[t][i + 1] >= k) {
out << v[i] << " ";
n /= v[i];
if(n!=1)
while(v[t] > n)
--t;
}
else {
k -= d[t][i] - d[t][i + 1];
++i;
}
}
return 0;
}