Cod sursa(job #956526)

Utilizator ayakutAlperen Yakut ayakut Data 3 iunie 2013 12:18:26
Problema NumMst Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
using namespace std;
int P[500];
int res[500];
int zz[500];
int mal[500];
int p;
int N;
int gg,ss;
bool isPrime(int x)
{
	for(int i=0; i < p && P[i] * P[i] <= x;i++)
	{
		if((x%P[i]) == 0) return 0;
	}
	return 1;
}
int main()
{
	freopen("nummst.in","r",stdin);
	freopen("nummst.out","w",stdout);
	
	
	scanf(" %d",&N);
	
	for(int i=2;;i++)
	{
		if(!(N%i))
		{
			ss=i;
			gg=N/i;
			break;
		}
	}
	for(int i=2;i<=ss;i++)
	{
		if(isPrime(i)) P[p++]=i; 
	}
	int t;
	int aa=ss;
	if(ss < 300) int arr[1000000000];
	while(aa > 2 && ss)
	{
		int i;
		for(i=0;i<p;i++)
		{
			t=mal[i];
			if(!t) mal[i]=P[i];
			else mal[i]=P[i]*mal[i];
			t=mal[i]-t;
			if(t < 0) break;
			if(ss >= t)
			{
				zz[i]++;
				res[i]=mal[i];
				ss-=t;
			}
			else if(!i) break;
		}
		if(!i) break;
	}
	for(int i=0;i<p;i++)
		if(res[i]) printf("%d ",res[i]*gg);
	while(ss--) printf("%d ",gg);
	printf("\n");
	return 0;
}