Pagini recente » Cod sursa (job #1787899) | Cod sursa (job #1785060) | Cod sursa (job #301002) | Cod sursa (job #116728) | Cod sursa (job #75386)
Cod sursa(job #75386)
#include<stdio.h>
#define Dm 3501
#define SqrtnM 1000001
int M[Dm][Dm],Poz[SqrtnM],k,d;
long long D[Dm],Ans[Dm],n;
void read()
{
freopen("desc.in","r",stdin);
scanf("%lld%d",&n,&k);
}
void solve()
{
int i,j;
for(i=1;(long long)i*i<=n;++i)
if(n%i==0)
{
D[++d]=i;
Poz[i]=d;
}
for(i=d-(D[d]*D[d]==n);i;--i)
D[++d]=n/D[i];
for(i=2;i<=d;++i)
{
M[i][i]=1;
for(j=i-1;j>1;--j)
{
M[i][j]=M[i][j+1];
if(D[i]%D[j]==0 && D[j]<=D[i]/D[j])
if(D[i]/D[j]<=D[d+1>>1])
M[i][j]+=M[Poz[D[i]/D[j]]][j];
else
M[i][j]+=M[d-Poz[n/(D[i]/D[j])]+1][j];
}
}
i=d; j=2;
while(1)
{
for(;M[i][j]-M[i][j+1]<k;++j)
k-=M[i][j]-M[i][j+1];
if(D[i]==D[j])
{
Ans[++Ans[0]]=D[j];
break;
}
Ans[++Ans[0]]=D[j];
if(D[i]/D[j]<=D[d+1>>1])
i=Poz[D[i]/D[j]];
else
i=d-Poz[n/(D[i]/D[j])]+1;
}
}
void write()
{
int i;
freopen("desc.out","w",stdout);
printf("%d\n",M[d][2]);
for(i=1;i<Ans[0];++i)
printf("%lld ",Ans[i]);
printf("%lld\n",Ans[i]);
}
int main()
{
read();
solve();
write();
return 0;
}