Pagini recente » Cod sursa (job #2539320) | Cod sursa (job #1132638) | Cod sursa (job #2661877) | Cod sursa (job #3155458) | Cod sursa (job #327593)
Cod sursa(job #327593)
#include <stdio.h>
#include <string.h>
#define Nmax 105
int p[Nmax],prim[Nmax],exp[Nmax],c[Nmax],v[Nmax],vp[Nmax];
int n,k,x,i,z,j,aux;
void ciur(){
int i,j;
for(i=2;i<=10;++i)
if(p[i]==0)
for(j=i*i;j<=Nmax; j+=i)
p[j]=1;
for(i=2;i<=Nmax;++i)
if(!p[i]) prim[++z]=i;
}
void desfa(int x){
int i;
for(i=1; i<=z && x; ++i)
for( ; x % prim[i]==0; ++exp[prim[i]], x/=prim[i]);
}
void mul(int a[Nmax],int b[Nmax]){
int i,t,j;
memset(c,0,sizeof(c));
for(i=1;i<=a[0]; ++i){
for(t=0,j=1; j<=b[0] || t; ++j, t/=10)
c[i+j-1] = (t += c[i+j-1]+a[i]*b[j] ) %10;
if(i+j-2>c[0]) c[0]=i+j-2;
}
}
int main(){
ciur();
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) desfa(j);
}
v[0]=1; v[1]=1;
for(i=1;i<Nmax;++i){
for(vp[0]=0,aux=i; aux; vp[++vp[0]]=aux%10, aux/=10);
if(exp[i] % k !=0 )
for(j=1; j<=k-exp[i]%k; ++j){
mul(v,vp);
memcpy(v,c,sizeof(c));
}
}
for(i=v[0];i>=1;--i) printf("%d",v[i]);
printf("\n");
fclose(stdin); fclose(stdout);
return 0;
}