Pagini recente » Cod sursa (job #1498145) | Cod sursa (job #2057277) | Cod sursa (job #2783784) | Cod sursa (job #2238172) | Cod sursa (job #839249)
Cod sursa(job #839249)
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[2000][2000],dvz[2000],d,n,k;
void citire()
{
freopen("desc.in","r",stdin);
scanf("%d %d",&n,&k);
}
void divizori()
{
for(int i=1;i*i<=n;i++)
{
if(n%i==0)
{
dvz[d++]=i;
}
}
for(int i=0;i<d;i++)
{
dvz[2*d-i-1]=n/dvz[i];
}
d=d*2;
d--;
}
void din()
{
int x;
for(int i=1;i<=d;i++)
{
x=0;
a[i][i]=1;
a[0][i]=1;
for(int j=i-1;j>=1;j--)
{
a[i][j]=a[i][j+1];
for(;dvz[x]*dvz[j]<dvz[i];x++);
if(dvz[x]*dvz[j]==dvz[i])
{
a[i][j]+=a[x][j];
}
// printf("%d ",a[i][j]);
}
//printf("\n");
}
}
int cauta(int x,int p,int u)
{
int m;
while(p<=u)
{
m=(p+u)/2;
if(dvz[m]==x)
return m;
if(dvz[m]<x)
p=m+1;
else
u=m-1;
}
return -1;
}
void afisare()
{
int i,j,dvzp=1,u=d;
freopen("desc.out","w",stdout);
printf("%d\n",a[d][1]);
while(k!=0 && j!=0)
{
for(i=dvzp;i<=u;i++)
{
if(dvz[u]%dvz[i]!=0)
continue;
j=cauta(dvz[u]/dvz[i],0,u);
if(a[j][i]<k && j!=-1)
{
k-=a[j][i];
}
else
if(j!=-1)
{
printf("%d ",dvz[i]);
dvzp=i;
u=j;
break;
}
}
}
}
int main()
{
citire();
divizori();
din();
afisare();
return 0;
}