Pagini recente » Cod sursa (job #30397) | Cod sursa (job #2741924) | Cod sursa (job #3283375) | Cod sursa (job #105925) | Cod sursa (job #1765965)
#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,long long div1,long long div2)
{
while(D[X]<div1/div2)
X++;
if(D[X]>div1/div2)X--;
return X;
}
int NF(int &X,long long div1,long long div2)
{
while(X>=0&&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]);
NF(ind,N,D[div]);
N/=D[div];
}
return 0;
}