Pagini recente » Cod sursa (job #1067669) | Cod sursa (job #2747954) | Cod sursa (job #2291378) | Cod sursa (job #2339715) | Cod sursa (job #2581571)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream f("nummst.in");
ofstream g("nummst.out");
int n,i,cmmdc,k;
double dp[465][3205];
int ant[465][3205];
int prim[465];
bool nueprim[3650];
int main()
{
f>>n;
for( i=2;i<=n;i++)
{
if(n%i==0)
{
//g<<n/i<<" "<<n-n/i;
cmmdc=n/i;
break;
}
}
n=n/cmmdc;
prim[++k]=2;
for( i=3;i<=n;i+=2)
{
if(nueprim[i]==0)
{
prim[++k]=i;
for(int j=i*2;j<=n;j+=i)
{
nueprim[j]=1;
}
}
}
for( i=1;i<=k;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i-1][j];
}
if(prim[i]>n)
{
break;
}
int val=prim[i];
while(val<=n)
{
for(int j=0;j<=n-val;j++)
{
if(dp[i-1][j]+log(val)>dp[i][j+val])
{
dp[i][j+val]=dp[i-1][j]+log(val);
ant[i][j+val]=val;
}
}
val=val*prim[i];
}
}
i=k-1;
//cout<<i<<" ";
while(i>0)
{
if(ant[i][n]>0){
g<<cmmdc*ant[i][n]<<" ";
n=n-ant[i][n];
}
i--;
}
if(n!=0)
{
g<<n*cmmdc;
}
}