Pagini recente » Cod sursa (job #2078579) | Istoria paginii runda/pregatireoji2011/clasament | Cod sursa (job #421796) | Cod sursa (job #2018875) | Cod sursa (job #137849)
Cod sursa(job #137849)
#include<stdio.h>
long int n,k,i,j,m,np,p[101],pp[26][101],x,e[26],sol[1000];
void produs();
int main()
{
FILE *f,*g;
f=fopen("factoriale.in","r");
g=fopen("factoriale.out","w");
fscanf(f,"%ld%ld",&n,&k);
for(i=1;i<=100;i++)p[i]=i;
for(i=2;i<=100;i++)
if(p[i]==i)
{ np++;
p[np]=i;
for(j=i;j<=100;j=j+i)
while(p[j]%i==0)
{ pp[np][j]++;
p[j]/=i;
}
}
for(i=1;i<=np;i++)
for(j=1;j<=100;j++)
{ pp[i][j]+=pp[i][j-1];while(pp[i][j]>=k)pp[i][j]-=k;}
sol[0]=1;
for(i=1;i<=n;i++)
{ fscanf(f,"%ld",&x);
for(j=1;j<=np;j++)
{ if(p[j]>x)break;
e[j]+=pp[j][x];
while(e[j]>=k)e[j]-=k;
}
}
sol[0]=1;
for(i=1;i<=np;i++){e[i]%=k;while(e[i]){produs();e[i]--;}}
for(i=505;i>=0;i--)if(sol[i])break;
for(j=i;j>=0;j--)fprintf(g,"%ld",sol[i]);
fcloseall();
return 0;
}
void produs()
{
for(m=0;m<=500;m++) sol[m]*=p[i];
for(m=0;m<=500;m++) {sol[m+1]+=sol[m]/10;sol[m]%=10;}
}