Pagini recente » Cod sursa (job #1904432) | Cod sursa (job #2089194) | Cod sursa (job #560283) | Cod sursa (job #2383173) | Cod sursa (job #2641804)
#include <bits/stdc++.h>
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
long long fact[21],n,m,d,numar,maxim,suma,sol,valoare,numere,din[30005],j,divizori[30005],q,copie,nr;
int dp[10005][10005],i;
unordered_map <long long,int > poz;
int main()
{
f>>n>>m;
for (i=1;i*i<n;i++)
{
if (n%i==0)
{
divizori[++q]=i;
divizori[++q]=n/i;
}
}
if (i*i==n)
{
divizori[++q]=i;
}
sort (divizori+1,divizori+q+1);
for (i=1;i<=q;i++)
{
poz[divizori[i]]=i;
dp[1][i]=1;
}
for (i=2;i<=q;i++)
{
for (j=i;j>=2;j--)
{
dp[i][j]=dp[i][j+1];
if (divizori[i]%divizori[j]==0)
{
dp[i][j]+=dp[poz[divizori[i]/divizori[j]]][j];
}
}
dp[i][1]=dp[i][2];
}
g<<dp[q][1]<<'\n';
i=2;
while (n>1)
{
for (;i<=q;i++)
{
if (n%divizori[i]==0)
{
long long valoare=n/divizori[i];
if (dp[poz[valoare]][i]<m)
{
m-=dp[poz[valoare]][i];
}
else
{
g<<divizori[i]<<" ";
n=valoare;
break;
}
}
}
}
return 0;
}