Pagini recente » Cod sursa (job #782581) | Cod sursa (job #1205385) | Cod sursa (job #3241183) | Cod sursa (job #1668597) | Cod sursa (job #2768343)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
long long n, k;
vector <long long> d;
unordered_map <long long, int> fr;
long long dp[5005][5005];
int main(){
fin >> n >> k;
for (int i = 1; 1LL * i * i <= n; ++i){
if (n % i == 0){
d.push_back(i);
if (n / i != i){
d.push_back(n / i);
}
}
}
sort(d.begin(), d.end());
for (int i = 1; i <= (int)d.size(); ++i){
fr[d[i - 1]] = i;
}
dp[d.size() + 1][d.size()] = 1;
for (int i = d.size(); i >= 2; --i){
for (int j = d.size(); j >= 1; --j){
long long val1 = d[i - 1], val2 = d[j - 1];
long long val = 1LL * val1 * val2;
int index = fr[val];
if (index){
dp[i][j] = dp[i + 1][j] + dp[i][index];
}
else{
dp[i][j] = dp[i + 1][j];
}
}
}
fout << dp[2][1] << "\n";
int i = 2, j = 1;
while (i <= d.size()){
long long val1 = d[i - 1], val2 = d[j - 1];
long long val = 1LL * val1 * val2;
int index = fr[val];
if (index){
if (dp[i][index] < k){
k -= dp[i][index];
++i;
}
else{
fout << d[i - 1] << " ";
j = index;
}
}
else{
++i;
}
}
fin.close();
fout.close();
return 0;
}