Pagini recente » Cod sursa (job #872119) | Cod sursa (job #3274142) | Cod sursa (job #90999) | Cod sursa (job #3222182) | Cod sursa (job #586107)
Cod sursa(job #586107)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
#define maxn 5000010
int N, maxdiv;
int viz[maxn];
vector<int> prim, gramezi;
vector<pair<int, int> > sum;
void ciur() {
int i, j;
for(i=2; i<=N; i++) {
if(!viz[i]) {
prim.push_back(i);
for(j=2*i; j<=N; j+=i) {
viz[j] = 1;
}
}
}
}
int main() {
FILE *f1=fopen("nummst.in", "r"), *f2=fopen("nummst.out", "w");
int i, j, p, q;
fscanf(f1, "%d\n", &N);
int rad = sqrt(N);
for(i=2; i<=rad; i++) {
if(N % i == 0) {
maxdiv = max(maxdiv, i);
maxdiv = max(maxdiv, N / i);
}
}
N = N / maxdiv;
ciur();
p = q = 0;
int asd = 1;
while(asd && q < prim.size()) {
if(p + prim[q] <= N) {
p = p + prim[q];
sum.push_back( make_pair(prim[q], prim[q]) );
}
else {
asd = 0;
}
q ++;
}
while(1) {
int ok = 0;
for(i=sum.size()-1; i>=0; i--) {
if(p + sum[i].second <= N) {
sum[i].first = sum[i].first * sum[i].second;
p = p + sum[i].second;
ok = 1; break;
}
}
if(!ok) break;
}
while(p < N) {
sum.push_back( make_pair(1, 1) );
p ++;
}
for(i=0; i<sum.size(); i++) {
gramezi.push_back( maxdiv * sum[i].first );
}
if(gramezi.size() == 1) {
int asd = gramezi[0];
asd = asd / 2;
gramezi[0] = asd;
gramezi.push_back(asd);
}
for(i=0; i<gramezi.size(); i++) {
fprintf(f2, "%d ", gramezi[i]);
} fprintf(f2, "\n");
fclose(f1); fclose(f2);
return 0;
}