Cod sursa(job #137505)

Utilizator SmarandaMaria Pandele Smaranda Data 17 februarie 2008 12:29:55
Problema Factoriale Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 9-a Marime 1.61 kb
#include<stdio.h>
#include<string.h>
int x[101];
int fp[]={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};
int e[30],e1[30];
int m[101],sol[101];
int y;
int main()
{
int n,k,i,ok,j,p,t;
long u,s;
long a[5001],b[5001];
long c[5001];
int cif,o=0,z=0;

freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);

scanf("%d %d",&n,&k);
for(i=1;i<=n;i++)
    scanf("%d",&x[i]);
ok=1;
for(j=1;j<=n;j++)
    {
      ok=1;i=1;
      do
	{
	 if(x[j]/fp[i]>0)
	 {
	   u=fp[i];
	   s=0;
	   while(x[j]/u>0)
	       {
		 s+=x[j]/u;
		 u=u*fp[i];
	       }
	   e[i]+=s;
	   i++;
	 }
	 else
	   ok=0;
	}while(ok);
    }
ok=1;
u=k;
y=i-1;
for(i=1;i<=100;i++)
    {
      m[i]=u;
      u=k*(i+1);
    }
u=0;
for(i=1;i<=y;i++)
    {
      ok=1;
      for(j=1;j<=100;j++)
	  if(m[j]==e[i])
	     ok=0;
      if(ok)
	 {
	   for(j=1;m[j]<e[i];j++);
	   e1[i]=m[j]-e[i];
	   sol[++u]=i;
	 }
    }
memset(a,0,sizeof(a));
     memset(b,0,sizeof(b));
     memset(c,0,sizeof(c));
if(u)
   {
     for(y=1;y<=u;y++)
     {p=fp[sol[y]];

     do
       {
	 cif=p%10;
	 a[++o]=cif;
	 p=p/10;
       }while(p);
     p=e1[sol[y]];
     do
       {
	 cif=p%10;
	 b[++z]=cif;
	 p=p/10;
       }while(p);
     c[0]=o+z-1;
     for(i=1;i<=o;i++)
	 for(j=1;j<=z;j++)
	     c[i+j-1]=c[i+j-1]+a[i]*b[j];
     t=0;
     for(i=1;i<=c[0];i++)
	 {
	   c[i]=c[i]+t;
	   t=c[i]/10;
	   c[i]=c[i]%10;
	 }
    if(t>0)
       {
	 c[0]++;
	 c[c[0]]=t;
       }
    memcpy(b,c,sizeof(b));
  }
}
for(i=c[0];i>=1;i--)
   printf("%ld",c[i]);
return 0;
}