Cod sursa(job #235345)

Utilizator DraStiKDragos Oprica DraStiK Data 23 decembrie 2008 14:35:56
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
int a[101];
int n,k;
int ciur[25]={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};
int p[25];
int prod[10001];
void inmult (int val)
{
    int i,c[10001];
	c[0]=prod[0];
	for (i=1; i<=10000; ++i)
		c[i]=0;
    for (i=1; i<=c[0]; ++i)
        c[i]=prod[i]*val;
    for (i=1; i<=c[0]; ++i)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
	}
	if (c[i])
		++c[0];
    while (c[i]>9)
    {
        c[i+1]=c[i]/10;
        c[i]%=10;
        ++i;
        ++c[0];
    }
    for (i=0; i<=c[0]; ++i)
        prod[i]=c[i];
}
int main ()
{
	freopen ("factoriale.in","r",stdin);
	freopen ("factoriale.out","w",stdout);
	int i,j,aux;
	scanf ("%d%d",&n,&k);
	for (i=1; i<=n; ++i)
	{
	    scanf ("%d",&a[i]);
		for (j=0; ciur[j]<=a[i]; ++j)
		{
			aux=a[i];
			while (aux)
			{
				  p[j]+=aux/ciur[j];
				  aux/=ciur[j];
			}
		}
	 }
	 prod[0]=prod[1]=1;
	 for (i=0; i<=24; ++i)
		 if (p[i]%k!=0)
		 {
					   aux=p[i]%k;
					   aux=k-aux;
					   for (j=1; j<=aux; ++j)
					       inmult (ciur[i]);
		 }
	for (i=prod[0]; i; --i)
	   printf ("%d",prod[i]);
	return 0;
}