Pagini recente » Cod sursa (job #1335191) | Cod sursa (job #2298364) | Cod sursa (job #3002600) | Cod sursa (job #1588358) | Cod sursa (job #587747)
Cod sursa(job #587747)
# include <algorithm>
# include <cstdio>
# include <cmath>
# include <vector>
using namespace std ;
# define pb push_back
const char *FIN = "nummst.in", *FOU = "nummst.out" ;
unsigned char V[1 << 20];
double mat[600][4100] ;
vector < int > P, sol ;
int N, gr ;
int main (void) {
fscanf ( fopen (FIN, "r"), "%d", &N ) ;
for ( int i = 2; i * i <= N; ++i ) {
if ( N % i ) continue ;
gr = N / i, N = i ;
}
P.pb (0), P.pb (2) ;
for (int i = 1; ( i * i << 1 ) + ( i << 1 ) <= N; ++i) {
if ( ( V[i >> 3] & ( 1 << ( i & 7 ) ) ) ) continue;
for (int j = ( i * i << 1 ) + ( i << 1 ); ( j << 1 ) + 1 <= N; j += ( i << 1 ) + 1) {
V[j >> 3] |= ( 1 << ( j & 7 ) );
}
}
for (int i = 1; ( i << 1 ) + 1 <= N; ++i) {
if ( ( V[i >> 3] & ( 1 << ( i & 7 ) ) ) == 0 ) {
P.pb (( i << 1 ) + 1) ;
}
}
for ( int i = 1, j = P.size (); i < j; ++i ) {
for ( int j = 1; j <= N; ++j ) {
mat[i][j] = mat[i - 1][j] ;
for ( int div = P[i]; div <= j; div *= P[i] ) {
mat[i][j] = max (mat[i][j], log (1.0 * div) + mat[i - 1][j - div]) ;
}
}
}
int j = N ;
for ( int i = P.size () - 1 ; i > 0; --i ) {
if ( fabs(mat[i][j] - mat[i - 1][j]) > 0.00001 ) {
for ( int div = P[i]; div <= j; div *= P[i] ) {
if ( fabs(mat[i][j] - mat[i - 1][j - div] - log (1.0 * div)) <= 0.00001 ) {
j -= div, sol.pb (div) ;
break ;
}
}
}
}
for ( ; j > 0; --j, sol.pb (1) ) ;
sort ( sol.begin (), sol.end () ) ;
freopen (FOU, "w", stdout) ;
for ( int i = 0, j = sol.size (); i < j; ++i ) {
printf ( "%d ", sol[i] * gr ) ;
}
}