Pagini recente » Cod sursa (job #1917309) | Cod sursa (job #6325) | Cod sursa (job #2736300) | Cod sursa (job #2733242) | Cod sursa (job #1765955)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define MaxD 10000
using namespace std;
long long N,D[MaxD],K;
int mat[MaxD][MaxD],d;
int F(int &X,int div1,int div2)
{
while(D[X]<div1/div2)
X++;
if(D[X]>div1/div2)X--;
return X;
}
int NF(int &X,int div1,int div2)
{
while(D[X]>div1/div2)
X--;
if(D[X]<div1/div2)X++;
return X;
}
int main()
{
freopen("desc.in","r",stdin);
freopen("desc.out","w",stdout);
scanf("%lld%lld",&N,&K);
for(long long i=2;i*i<=N;i++)
if(N%i==0)D[++d]=i,D[++d]=N/i;
if(D[d]==D[d-1])d--;
D[++d]=N;
sort(D+1,D+1+d);
for(int i=1;i<=d;i++)
mat[0][i]=1;
for(int i=1;i<=d;i++)
{
int X=0;
for(int j=d;j>0;j--)
{
mat[i][j]=mat[i][j+1];
if(D[i]%D[j]==0)
mat[i][j]+=mat[F(X,D[i],D[j])][j];
}
}
printf("%d \n",mat[d][1]);
int ind=d,div=1;
while(ind>0&&N>1)
{
while(K>mat[ind][div]-mat[ind][div+1])K-=mat[ind][div]-mat[ind][div+1],div++;
printf("%lld ",D[div]);
ind=NF(ind,N,D[div]);
N/=D[div];
}
return 0;
}