Pagini recente » Cod sursa (job #2184748) | Cod sursa (job #1847078) | Cod sursa (job #1227154) | Cod sursa (job #1746360) | Cod sursa (job #585749)
Cod sursa(job #585749)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
#define maxn 5000010
int N, maxdiv;
int tt[maxn];
double A[maxn];
vector<int> gramezi;
int main() {
FILE *f1=fopen("nummst.in", "r"), *f2=fopen("nummst.out", "w");
int i, j, p, q;
fscanf(f1, "%d\n", &N);
for(i=1; i<=N/2; i++) {
if(N % i == 0) {
maxdiv = i;
}
}
N = N / maxdiv;
A[1] = log(1); A[2] = log(1); A[3] = log(2); A[4] = log(4);
for(i=5; i<=N; i++) {
int rad = sqrt(i);
for(j=i; j>=rad; j--) {
if(log(j) + A[i-j] >= A[i]) {
A[i] = log(j) + A[i-j];
tt[i] = i - j;
}
}
}
int val = N;
while(val) {
int pietre = val - tt[val];
//fprintf(f2, "%d ", maxdiv * pietre);
gramezi.push_back(maxdiv * pietre);
val = tt[val];
}
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;
}