Pagini recente » Cod sursa (job #2497347) | Cod sursa (job #2528629) | Cod sursa (job #2352925) | Cod sursa (job #2033792) | Cod sursa (job #356617)
Cod sursa(job #356617)
#include <cstdio>
#define lm 1000
int d[lm], v[lm][lm], n, m, l, x;
void afisare (int p, int k)
{
int c, i, j;
if (p)
{
for (i=k; v[p][i]-v[p][i+1]<m && i<=n; m-=v[p][i]-v[p][i+1], i++);
c=d[p]/d[i];
for (j=0; j<=n; j++)
if (d[j]==c) break;
printf("%d ",d[i]);
afisare(j,i);
}
}
int main()
{
freopen("desc.in","r",stdin);
freopen("desc.out","w",stdout);
scanf("%d %d",&n,&m);
int i, j;
for (i=2; i*i<=n; i++)
if (!(n%i))
{
l++;
d[l]=i;
}
if (d[l]*d[l]==n)
{
for (i=l+1; i<=2*l-1; i++) d[i]=n/d[l-(i-l)];
l=2*l-1;
} else
{
for (i=l+1; i<=2*l; i++) d[i]=n/d[l-i+l+1];
l=2*l;
}
l++;
d[l]=n;
int p;
for (i=1; i<=l; i++)
{
v[i][i]=1;
p=1;
for (j=i-1; j>0; j--)
{
v[i][j]=v[i][j+1];
if (!(d[i]%d[j]) && d[i]/d[j]>=d[j])
{
if (p<j) p=j;
for (; d[p]!=d[i]/d[j]; p++);
v[i][j]+=v[p][j];
}
}
}
printf("%d\n",v[l][1]);
x=0;
d[0]=1;
afisare(l,1);
}