Pagini recente » Cod sursa (job #2641199) | Cod sursa (job #2917821) | Cod sursa (job #1741436) | Cod sursa (job #1224926) | Cod sursa (job #138437)
Cod sursa(job #138437)
#include<stdio.h>
#define baza 10000000
#define maxl 100000
long sol[maxl+4];
long n,k,nr;
long prim[128],v[128];
void ciur()
{
for(long i = 2; i <= 100; ++i)
{
long ok = 1;
for(long j = 2; j*j<=i; ++j)
if(i%j == 0)
{
ok = 0;
break;
}
if(ok)
prim[++nr] = i;
}
}
void baga(long w)
{
for( long i = 1; i <= nr && w > 1; ++i)
{
while(w % prim[i] == 0)
{
v[i]++;
w/=prim[i];
}
}
}
void prod(long *a,long val)
{
for(long i = maxl; i >= a[0]; --i)
{
a[i] = a[i] * val + a[i+1]/baza;
a[i+1]%=baza;
}
if(a[a[0]]>=baza)
{
a[0]--;
a[a[0]]= a[a[0]+1]/baza;
a[a[0]+1]%=baza;
}
}
void afisare(long *w)
{
printf("%ld",w[w[0]]);
for(long i = w[0]+1; i <= maxl; ++i)
{
printf("%07ld",w[i]);
}
}
int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
ciur();
scanf("%ld %ld",&n,&k);
for( long i = 1; i <= n; ++i)
{
long w;
scanf("%ld",&w);
for(long j = 1; j <= w; ++j)
baga(j);
}
sol[maxl] = 1;
sol[0] = maxl;
for( long i = 1; i <= nr; ++i)
{
long a = k-v[i]%k;
if(a == k) continue;
for( ; a; --a)
{
//sol*=prim[i];
prod(sol,prim[i]);
}
}
afisare(sol);
// printf("%lld\n",sol);
return 0;
}