Pagini recente » Cod sursa (job #1595445) | Cod sursa (job #721952) | Cod sursa (job #54763) | Cod sursa (job #487509) | Cod sursa (job #2528360)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("nummst.in");
ofstream fout("nummst.out");
const int DIM = 460;
const int VMAX = 3300;
int N, dmx, M;
double Dp[DIM][VMAX];
int T[DIM][VMAX];
vector<int> Primes;
bool f[VMAX];
void answer( int i, int j ){
if( i == 0 ){
while( j != 0 ){
fout << dmx << " ";
j--;
}
return;
}
answer( i - 1, j - T[i][j] );
if( T[i][j] != 0 )
fout << 1LL * dmx * T[i][j] << " ";
}
int main(){
fin >> N;
for( int i = 2; i * i <= N; i++ ){
if( N % i == 0 )
dmx = max( dmx, max(i, N / i) );
}
M = N / dmx;
for( int i = 2; i < M; i++ ){
if( f[i] == false ){
Primes.push_back( i );
for( int j = i + i; j <= M; j += i )
f[j] = true;
}
}
for( int i = 0; i < Primes.size(); i++ ){
for( int j = 1; j <= M; j++ )
Dp[i + 1][j] = Dp[i][j];
int p = Primes[i];
while( p <= M ){
for( int j = 0; j + p <= M; j++ ){
if( Dp[i + 1][j + p] < Dp[i][j] + log(p) ){
Dp[i + 1][j + p] = Dp[i][j] + log(p);
T[i + 1][j + p] = p;
}
}
p *= Primes[i];
}
}
answer( Primes.size(), M );
return 0;
}