Pagini recente » Cod sursa (job #3236724) | Cod sursa (job #938907) | Cod sursa (job #2633955) | Cod sursa (job #3032603) | Cod sursa (job #3149431)
// #include <bits/stdc++.h>
// using namespace std;
// unordered_map<long long, int> mp;
// const int nax = 6725;
// long long dp[nax][nax];
// void solve() {
// ifstream cin ("desc.in");
// ofstream cout ("desc.out");
// long long n, k;
// cin >> n >> k;
// vector<long long> divs;
// for (long long i = 1; i * i <= n; ++i) {
// if (n % i == 0) {
// divs.push_back(i);
// if (i * i != n) {
// divs.push_back(n / i);
// }
// }
// }
// sort(divs.begin(), divs.end());
// for (int i = 0; i < divs.size(); ++i) {
// mp[divs[i]] = i;
// }
// for (int i = 0; i < divs.size(); ++i) {
// }
// }
// int main()
// {
// ios_base::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
// solve();
// }
#include<bits/stdc++.h>
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
long long n, k;
int dp[4201][4201];
long long divi[7500], nr;
unordered_map<long long, int>d;
int main()
{
f >> n >> k;
for(long long i = 1; i * i <= n; ++i)
{
if(n % i == 0)
{
if(i != 1)
divi[++nr] = i;
if(i != n / i)
divi[++nr] = n/i;
}
}
sort(divi + 1, divi + nr + 1);
divi[0] = 1;
for(int i = 1; i <= nr; ++i)
d[divi[i]] = i;
dp[0][nr] = 1;
for(int i = 0; i <= nr; ++i)
{
for(int e = nr; e >= 1; --e)
dp[i][e] += dp[i][e+1];
for(int j = i+1; j <= nr; ++j)
{
if(divi[j] % divi[i] != 0)
continue;
long long rap = divi[j]/divi[i];
if(d.find(rap) == d.end())
continue;
int x = d[rap];
dp[j][x] += dp[i][x];
}
}
int L = nr;
int C = 1;
g << dp[nr][1] << '\n';
while(k)
{
if(dp[L][C] - dp[L][C+1] < k)
{
k -= (dp[L][C] - dp[L][C+1]);
++C;
}
else
if(L == C && k == 1)
{
g << divi[C] << " ";
break;
}
else
{
g << divi[C] << " ";
n /= divi[C];
L = d[n];
}
}
return 0;
}