Pagini recente » Cod sursa (job #1600594) | Cod sursa (job #2426260) | Cod sursa (job #1403153) | Cod sursa (job #1910286) | Cod sursa (job #2588274)
#include <bits/stdc++.h>
using namespace std;
ifstream f("nummst.in");
ofstream g("nummst.out");
int n , cn ;
int dic , nr ;
int v[4000] , prime[1000] , tr ;
bool ciur[4000] ;
int main()
{
f >> n ;
cn = n ;
for( int i=2 ; i*i<=n ; i++ ){
if( n%i==0 ){
dic = i ;
break;
}
}
///20 de puncte?
if( dic<5 )
g<<cn/dic<<" "<<cn-cn/dic;
else{
int rest = dic , maxim = 0 , ind = 0 ;
for(int i=0 ; i<=rest ; i++)
v[i] = 1 ;
v[2] = 2 ; v[3] = 2 ; v[4] = 2 ;
for(int i=2 ; i<=rest ; i++){
if(ciur[i]==0){
tr++ ; prime[tr]=i ;
for(int j=i+i ; j<=rest ; j+=i ){
ciur[j] = 1 ;
}
}
}
for(int i=tr ; i>=2 ; i--){
for(int j=rest ; j>=prime[i] ; j--){
if( v[j] < v[j-prime[i]]*prime[i] && v[j-prime[i]]*prime[i] <= 1000 )
v[j] = v[j-prime[i]]*prime[i] ;
}
}
for(int i=1 ; i<=dic ; i++){
if (v[i]>maxim){
maxim = v[i] ;
ind = i ;
}
}
for(int i=1 ; i<=rest-ind ; i++){
g<<cn/dic<<" ";
}
for(int i=2 ; i<=maxim/2 ; i++){
if( maxim%i==0 ){
g<<i*cn/rest<<" ";
maxim/=i;
}
}
if(maxim)
g<<maxim*cn/rest;
}
}