Cod sursa(job #137426)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 17 februarie 2008 12:06:39
Problema Factoriale Scor 40
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 5-8 Marime 1.13 kb
#include<stdio.h>
#include<math.h>
int n,putere,f[30],v[110],prim[]={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,101};


void read()
{
int i;
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d%d",&n,&putere);
for(i=1;i<=n;i++)
	scanf("%d",&v[i]);
}


int kinn(int k, int m)
{
long p=k;
int nr=0;
while(m>=p)
	{
	nr=nr+m/p;
	p=p*k;
	}
return nr;
}


/*void inmultire()
{
int i,j;
v1[1]=1;
for(j=1;j<=25;j++)
	for(i=1;i<=f[i];i++)
		{
		v1[i]=v1[i]*(prim[j]%10));
		}
}*/


void rez()
{
int i,j;
for(i=1;i<=n;i++)//fiecare x
	for(j=1;prim[j]<=v[i];j++)//fiecare nr prim <= v[i]
		f[j]=f[j]+kinn(prim[j],v[i]);

for(i=1;i<=25;i++)
	if(f[i])
		if(putere>f[i])
			f[i]=putere-f[i];
		else
			if(f[i]>putere)
				{
				if(f[i]%putere)
					f[i]=((f[i]/putere+1)*putere)-f[i];
				else
					f[i]=0;
				}
			else
				f[i]=0;
}


void write()
{
int i;
unsigned long long exp,p=1;
for(i=1;i<=25;i++)
	if(f[i])
		{
		exp=pow(prim[i],f[i]);
		p=p*exp;
		}
printf("%lld",p);
}


int main()
{
read();
rez();
write();
return 0;
}