Cod sursa(job #332775)
Utilizator | Data | 19 iulie 2009 18:35:52 | |
---|---|---|---|
Problema | Factoriale | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.79 kb |
#include <stdio.h>
#define Base 1000
int prim[123],x,n,k,i,d,e,j,rez[1000],p;
void fact(int a)
{
e=0;
d=2;
while(a%d==0)
{
a/=d;
e++;
}
if (e>0)
prim[d]+=e;
d=3;
while(a!=1)
{
e=0;
while(a%d==0)
{
a/=d;
e++;
}
if (e>0)
prim[d]+=e;
d+=2;
}
}
void init(int cif)
{int i,t=0;
for(i=1;i<=rez[0]||t;++i)
{ t+=rez[i]*cif;
rez[i]=t%Base;
t/=Base;
}
rez[0]=i-1;
}
int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d %d",&n,&k);
for (i=1;i<=n;++i)
{
scanf("%d", &x);
for (j=2;j<=x;++j)
fact(j);
}
rez[0]=1;
rez[1]=1;
for (i=2;i<=100;++i)
if (prim[i]>0)
{
if (prim[i]%k!=0)
{
p=1;
for (j=1;j<=k-(prim[i]%k);++j)
//p*=i;
//rez*=p;
init(i);
}
}
//printf("%d", rez);
printf("%d",rez[rez[0]]);
for(i=rez[0]-1;i>0;--i)
printf("%03d",rez[i]);
return 0;
}