Cod sursa(job #213777)

Utilizator IrnukIrina Grosu Irnuk Data 11 octombrie 2008 14:57:06
Problema Factoriale Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
/*Definim P! (P factorial) ca fiind produsul primelor P numere intregi pozitive. Fie N numere 
naturale x1, x2... xN date. Notam cu M = (x1!) * (x2!) * ... * (xN!). Sa se determine care este cel 
mai mic numar natural nenul cu care trebuie inmultit numarul M astfel incat rezultatul sa se poate 
scrie sub forma AK, unde K este dat si A este numar natural.*/


#include<fstream.h>
#include<math.h>

long v[105],pr[105],numar=1,n,k;

ifstream fin("factoriale.in");
ofstream fout("factoriale.out");

int prim(long x)
{
	long i;
	double d=sqrt(x);
	
	for(i=2;i<=d;i++)
		if(x%i==0)
			return 0;
	return 1;
}

void prime()
{
	long i;
	for(i=2;i<100;i++)
	{
		if(prim(i)==1)
			pr[++pr[0]]=i;
	}
}

void sparge (long x)
{
	long nr=1;

	while(x!=1)
	{
		while(x%pr[nr]==0)
		{
			x/=pr[nr];
			v[pr[nr]]++;
		}
		nr++;
	}
}

int main()
{
	long x,i,j;
	fin>>n>>k;
	
	prime();

	for(i=0;i<n;i++)
	{
		fin>>x;
		for(j=2;j<=x;j++)
		sparge(j);
	}
	
	for(i=2;i<=100;i++)
	{
		if(v[i]!=0)
		{
			if(v[i]<k)
				numar=numar*i*(k-v[i]);
		}
	}

	fout<<numar<<'\n';

	fout.close();
	return 0;
}