Cod sursa(job #137316)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 17 februarie 2008 11:12:07
Problema Factoriale Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 5-8 Marime 0.96 kb
#include <stdio.h>

int n, k, x[101], f[26], rez[1000];
int prim[27] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101};

void descomp(int x)
{
	int i, j, k;
	for (i = 1; i <= 26 && prim[i] <= x; i++)
	{
		j = k = prim[i];
		while (k <= x)
		{
			f[i] += x / k;
			k *= j;
		}
	}
}

void inmult(int A[], int B)
{
      int i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
	      A[i] = (t += A[i] * B) % 10;
      A[0] = i - 1;
}


void afis()
{
	int i;
	for (i = rez[0]; i >= 1; i--) printf("%d",rez[i]);
	printf("\n");
}

int main()
{
	freopen("factoriale.in","r",stdin);
	freopen("factoriale.out","w",stdout);
	int i, j;
	scanf("%d %d",&n,&k);
	rez[1] = rez[0] = 1;
	for (i = 1; i <= n; i++)
	{
		scanf("%d",x + i);
		descomp(x[i]);
	}
	for (i = 1; i <= 26; i++)
	{
		if (f[i] % k)
		for (j = f[i] % k; j < k; j++)  inmult(rez,prim[i]);
	}
	afis();
	return 0;
}