Cod sursa(job #137864)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 17 februarie 2008 15:40:50
Problema Factoriale Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
long int n,k,i,j,m,np,p[101],pp[26][101],x,e[26],sol[1000],ee;
void produs();
int main()
{
	FILE *f,*g;f=fopen("factoriale.in","r");g=fopen("factoriale.out","w");
	fscanf(f,"%ld%ld",&n,&k);
	for(i=1;i<=100;i++)p[i]=i;
	for(i=2;i<=100;i++)if(p[i]==i){np++;p[np]=i;for(j=i;j<=100;j=j+i)while(p[j]%i==0){pp[np][j]++;p[j]/=i;}}
	for(i=1;i<=np;i++)
	 for(j=1;j<=100;j++)
	  pp[i][j]+=pp[i][j-1];}
	sol[0]=1;
	for(i=1;i<=n;i++)
	{ fscanf(f,"%ld",&x);
	  for(j=1;j<=np;j++)
	   { if(p[j]>x)break;
	     e[j]+=pp[j][x];
	   }
	}
	sol[0]=1;
	for(i=1;i<=np;i++)
	 { ee=(e[i]%k);
	   if(ee)
	   { ee=k-ee;
	     while(ee){produs();ee--;}
	   }
	 }
	for(i=505;i>=0;i--)if(sol[i])break;
	for(j=i;j>=0;j--)fprintf(g,"%ld",sol[i]);
	fcloseall();
	return 0;
}
void produs()
{
	for(m=0;m<=500;m++) sol[m]*=p[i];
	for(m=0;m<=500;m++) {sol[m+1]+=sol[m]/10;sol[m]%=10;}
}