Pagini recente » Cod sursa (job #2726214) | Cod sursa (job #3261287) | Cod sursa (job #2363176) | Cod sursa (job #467383) | Cod sursa (job #585713)
Cod sursa(job #585713)
#include <cstdio>
using namespace std;
FILE *f=fopen("nummst.in", "r");
FILE *g=fopen("nummst.out", "w");
int n;
bool v[10000001];
int w[100000];
int aj[100000];
int nr[100000];
int aux[100000];
int u;
void swape(int &x, int &y)
{
int h=x; x=y; y=h;
}
int main()
{
fscanf(f, "%d", &n);
if (n%2==0)
{
fprintf(g, "%d %d", n/2, n/2);
fclose(f);
fclose(g);
return 0;
}
int i=0;
int ok=0;
for (i=2; i<=15000 && i<=n; ++i)
{
if (v[i]==0)
{
if (n%i==0)
{
ok=1;
break;
}
for (int j=i+i; j<=15000 && j<=n; j+=i)
v[j]=1;
}
}
int cmmdc=n/i;
int cv=n/cmmdc;
if (!ok)
{
cv=n;
cmmdc=1;
}
for (i=2; i<=cv; ++i)
{
if (v[i]==0)
{
w[++u]=i;
aux[u]=i;
aj[u]=i*(i-1);
nr[u]=u;
cv-=i;
}
}
if (cv==0)
{
for (int l=1; l<=u; ++l)
fprintf(g, "%d ", cmmdc*w[l]);
}
else
{
while (cv>aj[1])
{
w[nr[1]]+=aj[1];
cv-=aj[1];
aj[1]=w[nr[1]]*(aux[nr[1]]-1);
int k=1;
while (aux[nr[k]]*aj[k+1]<aj[k]*aux[nr[k+1]])
{
swape(nr[k], nr[k+1]);
swape(aj[k], aj[k+1]);
++k;
}
}
if (cv!=0)
w[++u]=cv;
for (int l=1; l<=u; ++l)
fprintf(g, "%d ", cmmdc*w[l]);
}
fclose(f);
fclose(g);
return 0;
}