Pagini recente » Cod sursa (job #396203) | Cod sursa (job #495765) | Cod sursa (job #2392407) | Cod sursa (job #1261357) | Cod sursa (job #2768344)
#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[3005][3005];
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);
}
}
}
int s = d.size();
sort(d.begin(), d.end());
for (int i = 1; i <= s; ++i){
fr[d[i - 1]] = i;
}
dp[s + 1][s] = 1;
for (int i = s; i >= 2; --i){
for (int j = s; 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 <= s){
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;
}