Cod sursa(job #137953)

Utilizator lamez0rBogdan Bondor lamez0r Data 17 februarie 2008 18:03:43
Problema Factoriale Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#include<math.h>
int n,k,v[101],max,max2,factori[]={0,2,3,5,7,11,13,17,19,23,29,31,37};
unsigned long q=1;

void citire ()
     {
     int i,x,j,poz,g,a;
     FILE *f;
     f=fopen("factoriale.in","r");
     fscanf(f,"%d%d",&n,&k);
     for (i=1;i<=n;++i)
	 {
	 fscanf(f,"%d",&x);
	 for (g=2;g<=x;++g)
	  {
	  poz=1;
	  a=g;
	  while (a!=1)
	       {
	       while (a%factori[poz]==0)
		     {
		     a=a/factori[poz];
		     v[factori[poz]]++;
		     if (v[factori[poz]]>max2)
			max2=v[factori[poz]];
		     }
	       ++poz;
	       }
	  if (factori[poz-1]>max)
	     max=factori[poz-1];
	  }

	 }
     fclose(f);
     }

void solve ()
     {
     int i;
     if (max2>k)
	{
	if (max2%k==0)
	   { k=k; }
	else
	   k=k*(max2/k+1);
	for (i=2;i<=max;++i)
	    if (v[i]%k!=0)
	       q=q*pow(i,k-v[i]);
	}
     else
	{
	for (i=2;i<=max;++i)
	    if (v[i])
	       q=q*pow(i,k-v[i]);
	}
     }

void afisare ()
     {
     FILE *f;
     f=fopen("factoriale.out","w");
     fprintf(f,"%ld",q);
     fclose(f);
     }

int main ()
{
citire ();
solve ();
afisare ();
return 0;
}