Cod sursa(job #137192)

Utilizator savimSerban Andrei Stan savim Data 17 februarie 2008 09:56:52
Problema Factoriale Scor 80
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 9-a Marime 1.25 kb
#include <stdio.h>
#include <math.h>
int i,j,k,n,m,t,cop;
int x[110],d[110],div[110],da[110],a[1100];
int main()
{
	freopen("factoriale.in","r",stdin);
	freopen("factoriale.out","w",stdout);
    
	for (i=1; i<=100; i++) { x[i]=0;d[i]=0;div[i]=0;da[i]=0;}
	for (i=1; i<=1000; i++) a[i]=0;

	scanf("%d%d",&n,&t);
    for (i=1; i<=n; i++)
        scanf("%d",&x[i]);
    
    m=0;
    for (i=2; i<=100; i++)
    {
        int gas=1;
        for (k=2; k<=sqrt(i); k++)
            if (i%k==0)    
            {
                gas=0;break;            
            }
        if (gas) {m++;d[m]=i;}
    }
    
    for (i=1; i<=n; i++)
    {
		for (j=1; j<=x[i]; j++)
		{
			k=0;cop=j;
			while (cop!=1)
			{
				k++;
				while (cop%d[k]==0 && cop>1)
				{
					div[k]++;
					cop/=d[k];
				}
			}
		}
    }
        
    for (i=1; i<=m; i++)
    if (div[i]%t!=0) da[i]=t-(div[i]%t);
    else da[i]=0;
    
	a[1000]=1;
	for (i=1; i<=m; i++)
		for (j=1; j<=da[i]; j++)
		{
			for (k=1000; k>=1; k--)
				a[k]*=d[i];
			for (k=1000; k>=1; k--)
			{
				a[k-1]+=a[k]/10;
				a[k]%=10;
			}
		}
	for (i=1; i<=1000; i++)
		if (a[i]!=0) {j=i;break;}

	for (i=j; i<=1000; i++)
		printf("%d",a[i]);
	printf("\n");

	return 0;
}