Pagini recente » Cod sursa (job #177926) | Cod sursa (job #2700433) | Cod sursa (job #884990) | Cod sursa (job #1537668) | Cod sursa (job #956651)
Cod sursa(job #956651)
//TC
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cassert>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
#define forn(a,b,c) for(int (a)=(b);(a)<=(c);(a)++)
#define forr(a,b,c) for(int (a)=(b);(a)>=(c);(a)--)
#define foreach(a,b) for( typeof( (b).begin() ) a=(b).begin(); (a)!=(b).end() ; (a)++ )
#define foreachr(a,b) for( typeof( (b).rbegin() ) a=(b).rbegin(); (a)!=(b).rend() ; (a)++ )
#define dg(x) cerr <<#x<<':'<<x<<" "
#define dbg(x) cerr <<#x<<':'<<x<<endl
#define SET(A,b) memset(A,b,sizeof (A) )
#define SIZE(A) ((int)(A).size())
#define ALL(A) (A).begin(),(A).end()
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define num(a) (1LL<<(a))
using namespace std;
typedef double dbl;
typedef long long Lint;
typedef pair<int,int> ii;
typedef pair<Lint,Lint> Lii;
const int MAXN = 5000;
Lint dn[MAXN];
Lint dn2[MAXN];
int dad[MAXN];
bool prime[MAXN];
int main(){
freopen("nummst.in","r",stdin);
freopen("nummst.out","w",stdout);
int N;
scanf(" %d",&N);
int X,T;
forn(i,2,N)
if(N%i==0)
{
T=N/i;
X=i;
prime[0]=1;
forn(j,2,X)
if(!prime[j])
{
for(int t=j*2;t<=X;t+=j)
prime[t]=true;
}
//~ dbg(X);
//~ dbg(T);
dn[0]=1;
dn[1]=1;
forn(j,1,X)
if(!prime[j])
{
memcpy(dn2,dn,sizeof dn);
for(int r=j;r<=X;r+=j)
{
forr(t,X,0)
if(t+r<=X && dn[t]*r>dn[t+r] && (r!=X || t!=0))
dn2[t+r]=dn[t]*r,dad[t+r]=t;
}
memcpy(dn,dn2,sizeof dn2);
}
//~ forn(j,1,X)
//~ printf("%Ld ",dn[j]);
//~ puts("");
forn(j,1,X)
if(dn[j-1]>dn[j])
dn[j]=dn[j-1],dad[j]=i-1;
while(X)
{
//~ dbg(X);
printf("%Ld ",T*(Lint)(X-dad[X]));
X=dad[X];
}
puts("");
return 0;
}
return 0;
}