Cod sursa(job #585843)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 30 aprilie 2011 12:10:57
Problema NumMst Scor 13
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 10-12 Marime 0.77 kb
#include <stdio.h>
#include <bitset>
using namespace std;
#define N_MAX 10000010
bitset <N_MAX> b;
int n;
void found(int x) {
    int val = n/x, s = x;
    for(int i = 2; i <= x && s >= i; ++i)
        if(!b[i]) printf("%d ", val*i), s-=i;
    if(s) printf("%d", val*s);
    printf("\n");
}
void ciur() {
    for(int i = 4; i <= n; i+= 2) b[i] = 1;
    for(int i = 3; i <= n; i += 2)
        if(!b[i]) {
            if(n%i==0) {
                found(i);
                return;
            }
            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);
        return 0;
    }
    ciur();
    return 0;
}