Pagini recente » Cod sursa (job #566748) | Cod sursa (job #2684826) | Cod sursa (job #1288598) | Cod sursa (job #2025269) | Cod sursa (job #385796)
Cod sursa(job #385796)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 1100
int n,k;
int d[N];
int a[N][N];
int rez[N];
inline int next(int i,int j)
{
for(; d[i]%d[j]!=0; ++j)
;
return j;
}
int main()
{
freopen("desc.in","r",stdin);
freopen("desc.out","w",stdout);
scanf("%d%d",&n,&k);
d[0]=1;
d[1]=n;
int i;
for(i=2; i*i<n; ++i)
{
if(n%i==0)
{
d[++d[0]]=i;
d[++d[0]]=n/i;
}
}
if(n%i==0)
d[++d[0]]=i;
sort(d+1,d+d[0]+1);
int t,x;
for(i=1; i<=d[0]; ++i)
{
a[i][d[0]+1]=0;
t=1;
for(int j=d[0]; j!=0; --j)
{
a[i][j]=a[i][j+1];
if(d[i]%d[j]==0)
{
x=d[i]/d[j];
if(x==1)
++a[i][j];
else
{
for(; d[t]!=x && t<d[0]; ++t)
;
a[i][j]+=a[t][j];
}
}
}
}
printf("%d\n",a[d[0]][1]);
return 0;
int j;
i=d[0];
j=1;
t=1;
int cat;
while(k!=0)
{
j=next(i,j);
if(i==j)
{
rez[++rez[0]]=d[i];
k=0;
continue;
}
t=next(i,j+1);
cat=a[i][j];
while(k>cat-a[i][t])
{
k-=cat-a[i][t];
cat=a[i][t];
j=t;
t=next(i,j+1);
}
rez[++rez[0]]=d[j];
x=d[i]/d[j];
for(; d[i]!=x; --i)
;
}
for(i=1; i<rez[0]; ++i)
printf("%d ",rez[i]);
printf("%d\n",rez[rez[0]]);
return 0;
}