Pagini recente » Cod sursa (job #956041) | Cod sursa (job #364526) | Cod sursa (job #1076735) | Cod sursa (job #915976) | Cod sursa (job #322420)
Cod sursa(job #322420)
#include<stdio.h>
FILE *in=fopen("factoriale.in","r"),*out=fopen("factoriale.out","w");
int n,k,x1,v[100],max=0;
int rez[100000];
void inmultire(int x[], int y)
{
int i;
unsigned long T=0;
for(i=1;i<=x[0];i++)
{
x[i]=x[i]*y+T;
T=x[i]/100000;
x[i]=x[i]%100000;
}
while (T)
{
x[0]++;
x[x[0]]=T%100000;
T/=100000;
}
}
int main()
{
int i,j,q,aux;
fscanf(in,"%d %d",&n,&k);
for(i=1; i<=n; i++)
{
fscanf(in,"%d",&x1);
if(x1>max) max=x1;
for(q=2;q<=x1;q++)
{
aux=q;
j=2;
while(aux>1)
{
if(aux%j==0)
{
v[j]++;
aux/=j;
}
else break;
}
j=3;
while(aux>1)
{
if(aux%j==0)
{
v[j]++;
aux/=j;
}
else
j+=2;
}
}
}
rez[0]=1;
rez[1]=1;
j=2;
if(v[j]&&v[j]%k)
{
if(v[j]<k)
aux=k-(v[j]%k);
else if (v[j]>k)
aux=(k+v[j])-(v[j]%k);
while(aux)
{
inmultire(rez,j);
aux--;
}
}
for(j=3;j<=max;j+=2)
{
if(v[j]<k)
aux=k-(v[j]%k);
else if (v[j]>k)
aux=(k+v[j])-(v[j]%k);
while(aux)
{
inmultire(rez,j);
aux--;
}
}
for(i=rez[0];i>0;i--)
fprintf(out,"%d",rez[i]);
fclose(out);
return 0;
}