Cod sursa(job #137590)

Utilizator hadesgamesTache Alexandru hadesgames Data 17 februarie 2008 12:46:04
Problema Factoriale Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 9-a Marime 1.2 kb
#include <stdio.h>
int nr,p[100],a[105][100],b[105][100],s[100],c[10000];
void ciur(int x)
{
	int i,j,prim[200]={0};
	for (i=2;i<=x;i++)
	{
		if (!prim[i])
		{
			nr++;
			p[nr]=i;
			for (j=i;j<=x;j+=i)
			{
				prim[j]=1;
			}
		}
	}
}
void inmultire(int a)
{
	int i,minte=0;
	for (i=1;i<=c[0];i++)
	{
		c[i]=c[i]*a+minte;
		minte=c[i]/10;
		c[i]%=10;
	}
	while (minte)
	{
		c[0]++;
		c[c[0]]=minte%10;
		minte/=10;
	}
}
int main()
{
	FILE *in,*out;
	int i,j,x,aux,n,k;
	in=fopen("factoriale.in","r");
	out=fopen("factoriale.out","w");
	ciur(100);
	for (i=1;i<=100;i++)
	{
		x=i;
		for (j=1;j<=nr&&x!=1;j++)
		{
			while (x%p[j]==0)
			{
				a[i][j]++;
				x/=p[j];
			}
		}
	}
	for (i=2;i<=100;i++)
	{
		for (j=1;j<=nr;j++)
			b[i][j]=b[i-1][j]+a[i][j];
	}
	fscanf(in,"%d%d",&n,&k);
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%d",&x);
		for (j=1;j<=nr;j++)
		{
			s[j]+=b[x][j];
		}
	}
	c[0]=1;
	c[1]=1;
	for (i=1;i<=nr;i++)
	{
		if (s[i]%k)
		{
			aux=(s[i]/k+1)*k-s[i];
			for (j=1;j<=aux;j++)
				inmultire(p[i]);
		}
	}
	for (i=c[0];i>=1;i--)
	{
		fprintf(out,"%d",c[i]);
	}
	fprintf(out,"\n");
	fclose(in);
	fclose(out);
	return 0;
	
}