Pagini recente » Cod sursa (job #1631841) | Cod sursa (job #470230) | Cod sursa (job #1974323) | Cod sursa (job #3203227) | Cod sursa (job #586234)
Cod sursa(job #586234)
#include <stdio.h>
#include <bitset>
#include <algorithm>
using namespace std;
#define N_MAX 10000010
bitset <N_MAX> b;
int v[10000], prim[10000];
int n, val;
void found(int x) {
int s = x, i, p;
val = n/x;
for(i = 1; i <= prim[0] && s >= prim[i]; ++i)
v[++v[0]] = prim[i], s-= prim[i];
p = i;
if(s == 0) return;
if(s == 1) {
v[++v[0]] = 1;
return ;
}
int ok = 1;
while(ok) {
ok = 0;
sort(v + 1, v + v[0] + 1);
for(int i = 1; i <= v[0]; ++i)
if(s+v[i] >= prim[p]) {
s = s+v[i] - prim[p];
v[i] = prim[p];
p++;
ok = 1;
}
}
if(s != 0) v[++v[0]] = s;
}
void ciur() {
for(int i = 4; i <= n; i+= 2) b[i] = 1;
prim[++prim[0]] = 2;
for(int i = 3; i <= n; i += 2)
if(!b[i]) {
if(n%i==0) {
found(i);
return;
}
prim[++prim[0]] = i;
for(int j = i; (long long) j*i <= n; ++j)
b[i*j] = 1;
}
}
int main() {
freopen("nummst.in", "r", stdin);
freopen("nummst.out" ,"w", stdout);
scanf("%d", &n);
if(n%2 == 0)
found(2);
else ciur();
for(int i = 1; i <= v[0]; ++i)
printf("%d ", v[i]*val);
printf("\n");
return 0;
}