Pagini recente » Borderou de evaluare (job #1240584) | Borderou de evaluare (job #975511) | Borderou de evaluare (job #1448461) | Borderou de evaluare (job #1012147) | Cod sursa (job #2641803)
#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;
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];
i=2;
while (n>1)
{
for (;i<=nr;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;
}