Pagini recente » Cod sursa (job #1941686) | Cod sursa (job #145085) | Cod sursa (job #2926576) | Cod sursa (job #2884819) | Cod sursa (job #575169)
Cod sursa(job #575169)
#include<stdio.h>
#include<math.h>
int n,k,nr;
int p[64];
int v[64];
int d[128][64];
int s[1024];
int prim(int x)
{
if(x==0 || x==1 || (x%2==0 && x!=2))
return 0;
int i,lim=sqrt(x);
for(i=3;i*i<=x;i=i+2)
if(x%i==0)
return 0;
return 1;
}
void gene_prim()
{
int i;
for(i=2;i<=100;i++)
if(prim(i))
p[++nr]=i;
}
void make()
{
int i,j,ci;
for(i=2;i<=100;i++)
{
ci=i;
j=1;
while(ci>1)
{
while(ci%p[j]==0)
{
ci=ci/p[j];
d[i][j]++;
}
j++;
}
}
}
void read()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d%d",&n,&k);
int i,a,j,x;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
for(j=2;j<=a;j++)
for(x=1;x<=nr;x++)
v[x]=v[x]+d[j][x];
}
for(i=1;i<=nr;i++)
{
v[i]=k-v[i]%k;
if(v[i]==k)
v[i]=0;
}
}
void inm(int x)
{
int i,t=0,lim=s[0];
for(i=1;i<=lim || t;i++)
{
t=t+s[i]*x;
s[i]=t%10;
t=t/10;
}
s[0]=i-1;
}
void rez()
{
s[++s[0]]=1;
int i,j,lim;
for(i=1;i<=nr;i++)
{
lim=v[i];
for(j=1;j<=lim;j++)
inm(p[i]);
}
for(i=s[0];i>=1;i--)
printf("%d",s[i]);
}
int main()
{
gene_prim();
make();
read();
rez();
return 0;
}