Cod sursa(job #230260)

Utilizator BiterBiter Marian Biter Data 13 decembrie 2008 14:53:51
Problema Factoriale Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>
int l[1000];int dim;


unsigned long int putere(int a,int b)
{
	unsigned long int i;unsigned long int rez=a;
	for (i=2;i<=b;i++)
	{
		rez=rez*a;
	}
	return rez;

}

int prim(int g)
{
	int i,s=0;
	for (i=1;i<=g;i++)
	{
		if ((g%i)==0) s++;
	}
	if (s==2) return 1; else return 0;
}


void desc( int nr)
{
	dim=0;
	int i;
	while (nr!=1)
	{

		for (i=1;i<=1000;i++)
		{
			if ((prim(i)==1)&&((nr%i)==0))
			{
				dim++;
				l[dim]=i;
				nr=nr/i;
				i=1002;
				
			}
		}
	
	}
}



int main()
{
    FILE *in=fopen("factoriale.in","r"),
	     *out=fopen("factoriale.out","w");

    int v[100],n,put,i,j,nr,w[100],vect[100];
	unsigned long int prod=1;
	fscanf(in,"%d",&n);
	fscanf(in,"%d",&put);

	
	
	
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%d",&vect[i]);

	}
	int max=0;
	
	for (i=1;i<=n;i++)
	{
		if (vect[i]>max) max=vect[i];
	}
	
	for (i=1;i<=max;i++)
	{
		v[i]=0;
		w[i]=0;
	}
	
		
	for (i=1;i<=n;i++)
	{
	
		for (j=1;j<=vect[i];j++)
		{
			++v[j];
		}
	}
	


	
	
	for (i=1;i<=max;i++)
	{
		if (prim(i)==0)
		{
			desc(i);
			for(j=1;j<=dim;j++)
			{
				v[l[j]]=v[l[j]]+v[i];
			}
			v[i]=0;
		}
	}

	for (i=1;i<=max;i++)
	{
		if (v[i]!=0)
	
		while (!((v[i]+w[i])%put==0))
		{
			++w[i];
		}
	}
	for (i=1;i<=max;i++)
	{
		
		if (w[i]!=0)
		prod=prod*putere(i,w[i]);
	}

		//for (i=1;i<=max;i++)


	fprintf(out,"%d",prod);
	



	

    
	return 0;

}