Pagini recente » Cod sursa (job #924212) | Cod sursa (job #1365230) | Cod sursa (job #1193063) | Cod sursa (job #1126662) | Cod sursa (job #585994)
Cod sursa(job #585994)
#include <fstream>
using namespace std;
ifstream in("nummst.in");
ofstream out("nummst.out");
const int N = 350001;
const int M = 5000001;
int n;
int dvvv;
int nd;
int bs;
int rcm;
int pcm;
int ds[N];
bool ciur[M];
int sol[N];
int bSol[N];
int GMD()
{
for (int i = 2; i <= n; ++i)
if (n % i == 0)
return i;
return 54321;
}
void SD()
{
for (int i = 2; i < dvvv; ++i)
if (!ciur[i])
{
ds[++nd] = i;
//out << divv[dc] << "\n";
for (int j = i + i; j < dvvv; j += i)
ciur[j] = true;
}
}
void Check(int poss, int remm)
{
int bAct = 1;
for (int i = 1; i < poss; ++i)
if (sol[i])
bAct *= sol[i] * ds[i];
if (bAct > bs)
{
bs = bAct;
pcm = poss;
rcm = remm;
for (int i = 1; i < poss; ++i)
bSol[i] = sol[i];
}
}
void GD(int poss, int remm)
{
if (poss > nd || remm < ds[poss])
{
Check(poss, remm);
return;
}
for (int i = 0; i * ds[poss] <= remm; ++i)
{
sol[poss] = i;
GD(poss + 1, remm - i * ds[poss]);
}
}
void Print()
{
int kk = n / dvvv;
for (int i = 1; i < pcm; ++i)
if (bSol[i])
out << bSol[i] * ds[i] * kk << " ";
if (rcm)
out << rcm * kk << "\n";
}
int main()
{
in >> n;
dvvv = GMD();
SD();
GD(1, dvvv);
Print();
return 0;
}