Pagini recente » Cod sursa (job #904431) | Borderou de evaluare (job #1245503) | Cod sursa (job #36526) | Cod sursa (job #2113737) | Cod sursa (job #2560623)
#include <fstream>
#include <cmath>
#include <algorithm>
#include <unordered_map>
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
long long dz[5000];
long long n;
int d[5000][5000];
int pz,k;
unordered_map< long long, int >h;
int main()
{
fin>>n>>pz;
for(long long i=1;i*i<n;i++)
if(n%i==0)
dz[++k]=i,dz[++k]=n/i;
if(sqrt(n)*sqrt(n)==n)
dz[++k]=sqrt(n);
sort(dz+1,dz+k+1);
for(int i=1;i<=k;i++)
h[dz[i]]=i;
for(int i=1;i<=k;i++)
d[1][i]=1;
for(int i=2;i<=k;i++)
{
long long di=dz[i];
d[i][i]=1;
for(int j=i;j>=2;j--)
{
d[i][j]=d[i][j+1];
long long dj=dz[j];
if(di%dj==0)
d[i][j]+=d[h[di/dj]][j];
}
d[i][1]=d[i][2];
}
fout<<d[k][1]<<'\n';
int p=2;
while(n>1)
while(p<=k)
{
if(n%dz[p]==0)
{
long long cat=n/dz[p];
int poz=h[cat];
if(d[poz][p]<pz)
pz-=d[poz][p];
else
{
fout<<dz[p]<<' ';
n=cat;
break;
}
}
p++;
}
return 0;
}