Cod sursa(job #132804)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 6 februarie 2008 17:22:44
Problema Factoriale Scor Ascuns
Compilator cpp Status done
Runda Marime 0.81 kb
#include <stdio.h>
#include <assert.h>

#define nmax 65536
#define BAZA 1000000
#define FOR(i,s,d) for(i=(s);i<(d);++i)

int n,k,X[nmax],A[nmax];

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

int main()
{
	assert(freopen("factoriale.in","r",stdin));
	freopen("factoriale.out","w",stdout);
	int i,j,l,aux;
	assert(scanf("%d %d",&n,&k)==2);
	assert(1<=n && n<=100);
	assert(2<=k && k<=100);
	FOR(i,0,n)
	{
		assert(scanf("%d",&X[i])==1);
		assert(1<=X[i] && X[i]<=100);
	}
	A[0]=A[1]=1;
	FOR(i,2,100)
	{
		FOR(j,2,i) if(i%j==0) break;
		if(i!=j) continue;
		for(aux=0,l=i;l<100;l*=i)
			FOR(j,0,n)
				aux+=X[j]/l;
		l=(k-aux%k)%k;
		FOR(j,0,l) inm(i);
	}
	printf("%d",A[A[0]]);
	for(i=A[0]-1;i;--i)
		printf("%06d",A[i]);
	printf("\n");
	return 0;
}