Pagini recente » Cod sursa (job #1941350) | Cod sursa (job #1791557) | Cod sursa (job #449620) | Cod sursa (job #1347005) | Cod sursa (job #586009)
Cod sursa(job #586009)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("nummst.in");
ofstream out("nummst.out");
const int N = 350005;
const int M = 5000001;
int n;
int dv;
int dc;
int cm;
int pcm;
int rcm;
int divv[N];
int sol[N];
int bSol[N];
bool ciur[M];
int Getdivv()
{
for (int i = 2; i <= n; ++i)
if (n % i == 0)
return i;
return 54321;
}
void Setdivv()
{
for (int i = 2; i < dv; ++i)
if (!ciur[i])
{
divv[++dc] = i;
//out << divv[dc] << "\n";
for (int j = i + i; j < dv; j += i)
ciur[j] = true;
}
}
void Check(int pos, int rem)
{
int bAct = 1;
for (int i = 1; i < pos; ++i)
if (sol[i])
bAct *= sol[i] * divv[i];
if (bAct > cm)
{
cm = bAct;
pcm = pos;
rcm = rem;
for (int i = 1; i < pos; ++i)
bSol[i] = sol[i];
}
}
void Godivv(int pos, int rem)
{
if (pos > dc || rem < divv[pos])
{
Check(pos, rem);
return;
}
for (int i = 0; i * divv[pos] <= rem; ++i)
{
sol[pos] = i;
Godivv(pos + 1, rem - i * divv[pos]);
}
}
void Print()
{
int kk = n / dv;
for (int i = 1; i < pcm; ++i)
if (bSol[i])
out << bSol[i] * divv[i] * kk << " ";
if (rcm)
out << rcm * kk << "\n";
}
int main()
{
in >> n;
dv = Getdivv();
// out << dv << "\n"; DV e bun
if(dv == 2)
{
out << n/2 << " " << n/2 << "\n";
return 0;
}
Setdivv();
Godivv(1, dv);
Print();
return 0;
}