Pagini recente » Cod sursa (job #1630559) | Cod sursa (job #2173949) | Cod sursa (job #1820052) | Cod sursa (job #2483148) | Cod sursa (job #689505)
Cod sursa(job #689505)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("desc.in","r");
FILE*g=fopen("desc.out","w");
int K,i,j,d;
long long Div[3005];
long long N,D[3005][3005];
int main () {
fscanf(f,"%lld %d",&N,&K);
for ( i = 1 ; 1LL * i * i <= N ; ++i ){
if ( !(N % i) ){
Div[++d] = i;
if ( i != N/i ){
Div[++d] = N / i;
}
}
}
sort(Div+1,Div+d+1);
for ( i = 1 ; i <= d ; ++i ){
D[1][i] = 1;
}
for ( i = 2 ; i <= d ; ++i ){
for ( j = d ; j >= 1 ; --j ){
int p = 1;
if ( j < i ){
if ( !(Div[i] % Div[j]) ){
long long searched = Div[i] / Div[j];
while ( p <= d && searched != Div[p] ) ++p;
D[i][j] = D[i][j+1] + D[p][j];
}
else{
D[i][j] = D[i][j+1];
}
}
else{
if ( j == i ){
D[i][j] = D[i][j+1] + 1;
}
else{
D[i][j] = D[i][j+1];
}
}
}
}
fprintf(g,"%lld\n",D[d][1]);
long long P = N; long long maxd = 2;
while ( P > 1 ){
int p = d;
for ( i = maxd ; i <= d ; ++i ){
if ( !(P % Div[i]) ){
long long searched = P / Div[i];
while ( p > 0 && searched != Div[p] ) --p;
if ( D[p][i] < K ){
K -= D[p][i];
}
else{
fprintf(g,"%d ",Div[i]);
P /= Div[i]; maxd = i;
break ;
}
}
}
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}