Pagini recente » Cod sursa (job #1238269) | Cod sursa (job #2084790) | Cod sursa (job #1816840) | Cod sursa (job #2222964) | Cod sursa (job #750098)
Cod sursa(job #750098)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in("desc.in");
ofstream out("desc.out");
const int N = 3000;
vector<long long> v;
long long n;
int k, t, d[N][N];
int main() {
long long 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;) {
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;
}