Pagini recente » Cod sursa (job #2311974) | Cod sursa (job #1991895) | Cod sursa (job #206757) | Cod sursa (job #2465256) | Cod sursa (job #2768339)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
long long n, k;
vector <long long> d;
map <long long, int> fr;
map <int, long long> fr2;
long long dp[1005][1005];
long long solve(int i, int j){
if (i > d.size()){
if (j == d.size()){
return dp[i][j] = 1;
}
return 0;
}
if (dp[i][j]){
return dp[i][j];
}
long long val1 = fr2[i], val2 = fr2[j];
long long val = 1LL * val1 * val2;
if (fr[val]){
return dp[i][j] = solve(i + 1, j) + solve(i, fr[val]);
}
else{
return dp[i][j] = solve(i + 1, j);
}
}
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;
fr2[i] = d[i - 1];
}
fout << solve(2, 1) << "\n";
int i = 2, j = 1;
while (i <= d.size()){
long long val1 = fr2[i], val2 = fr2[j];
long long val = 1LL * val1 * val2;
if (fr[val]){
if (dp[i][fr[val]] < k){
k -= dp[i][fr[val]];
++i;
}
else{
fout << fr2[i] << " ";
j = fr[val];
}
}
else{
++i;
}
}
fin.close();
fout.close();
return 0;
}