Pagini recente » Cod sursa (job #2082656) | Cod sursa (job #2544158) | Cod sursa (job #708252) | Cod sursa (job #1267405) | Cod sursa (job #1143683)
#include <cstdio>
using namespace std;
int fr[105][105],p[105],sol[100005],pr[100005],aux[100005];
inline void PreCalcul()
{
int i,n,d;
for(i=1;i<=100;++i)
{
n=i;
while(n%2==0)
{
++fr[i][2];
n/=2;
}
d=3;
while(n>1 && d*d<=n)
{
while(n%d==0)
{
++fr[i][d];
n/=d;
}
d+=2;
}
if(n>1)
++fr[i][n];
}
}
inline void Inmultire(int a[], int p)
{
int x=0,r=0,i;
for(i=1;i<=a[0];++i)
{
x=r+a[i]*p;
a[i]=x%10;
r=x/10;
}
while(r)
{
a[++a[0]]=r%10;
r/=10;
}
}
inline void InmultireMare(int a[], int b[], int c[])
{
int i,j,T=0;
c[0]=a[0]+b[0]-1;
for(i=1;i<=c[0];++i)
c[i]=0;
for(i=1;i<=a[0];++i)
for(j=1;j<=b[0];++j)
c[i+j-1]+=a[i]*b[j];
for(i=1;i<=c[0];++i)
{
T=(c[i]+=T)/10;
c[i]%=10;
}
if(T)
c[++c[0]]=T;
}
int main()
{
int N,K,i,r,x,j,k;
freopen ("factoriale.in","r",stdin);
freopen ("factoriale.out","w",stdout);
PreCalcul();
scanf("%d%d", &N,&K);
for(i=1;i<=N;++i)
{
scanf("%d", &x);
for(j=1;j<=x;++j)
for(k=1;k<=100;++k)
p[k]+=fr[j][k];
}
sol[0]=sol[1]=1;
for(i=1;i<=100;++i)
{
r=p[i]%K;
if(r)
r=K-r;
pr[0]=pr[1]=1;
for(j=1;j<=r;++j)
Inmultire(pr,i);
InmultireMare(sol,pr,aux);
sol[0]=aux[0];
for(j=1;j<=sol[0];++j)
sol[j]=aux[j];
}
for(i=sol[0];i;--i)
printf("%d", sol[i]);
printf("\n");
return 0;
}