Pagini recente » Cod sursa (job #2884135) | Cod sursa (job #2581109) | Cod sursa (job #3041686) | Cod sursa (job #3005555) | Cod sursa (job #3272535)
#include <fstream>
#include <unordered_map>
#include <algorithm>
#define dim 3100
using namespace std;
ifstream fin ("desc.in");
ofstream fout ("desc.out");
unordered_map <int,int> fr;
long long n,i,d,nrc,nr,k,dp[dim+1][dim+1],v[dim+1];
int main()
{
fin>>n>>nrc;
if (n==1)
{
fout<<"1\n1";
return 0;
}
for (d=2; d*d<n; d++)
{
if (n%d==0)
v[++k]=d,v[++k]=n/d;
}
if (d*d==n)
v[++k]=d;
v[++k]=n;
sort (v+1,v+k+1);
reverse (v+1,v+k+1);
v[k+1]=1;
for (int i=1; i<=k+1; i++)
fr[v[i]]=i;
dp[0][k+1]=1;
for (int i=0; i<k; i++)
{
for (int j=k+1; j>0; j--)
{
nr=v[j];
while (fr.find (nr)!=fr.end ())
{
dp[i+1][fr[nr]]+=dp[i][j];
nr=nr*v[i+1];
}
}
}
fout<<dp[k][1]<<"\n";
i=k;
while (n>1)
{
for (; i>0; i--)
{
if (n%v[i]==0)
{
if (dp[i][fr[n/v[i]]]>=nrc)
{
n/=v[i];
fout<<v[i]<<" ";
break;
}
nrc-=dp[i][fr[n/v[i]]];
}
}
}
return 0;
}