Pagini recente » Cod sursa (job #2139507) | Cod sursa (job #1268177) | Cod sursa (job #747065) | Cod sursa (job #816185) | Cod sursa (job #1397119)
#include <fstream>
#include <algorithm>
#define dim 4000
using namespace std;
ifstream fin("desc.in");
ofstream fout("desc.out");
long long n,k,i,j,d[dim][dim],nrdiv,di[dim],l,c,nr;
int cautare(long long x)
{
int st=1,dr=nrdiv,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(di[mij]>x)
dr=mij-1;
else
if(di[mij]<x)
st=mij+1;
else
return mij;
}
}
int main()
{
fin>>n>>k;
for(i=2;i*i<n;i++)
if(n%i==0)
di[++nrdiv]=i,di[++nrdiv]=n/i;
if(i*i==n)
di[++nrdiv]=i;
di[++nrdiv] = n;
sort(di+1,di+nrdiv+1);
for(i=1;i<=nrdiv;i++)
{
d[i][i]=1;
for(j=i-1;j>=1;j--)
{
d[i][j]=d[i][j+1];
if(di[i]%di[j]==0)
{
d[i][j]+=d[cautare(di[i]/di[j])][j];
}
}
}
fout<<d[nrdiv][1]<<'\n';
l=nrdiv;
c=1;
nr=di[nrdiv];
while(l>1)
{
if(d[l][c]-d[l][c+1]<k)
{
k-=(d[l][c]-d[l][c+1]);
c++;
}
else
{
fout<<di[c]<<' ';
nr/=di[c];
l=cautare(nr);
}
}
return 0;
}