Pagini recente » Cod sursa (job #2697042) | Cod sursa (job #2871780) | Cod sursa (job #283828) | Cod sursa (job #2621158) | Cod sursa (job #502218)
Cod sursa(job #502218)
#include <stdio.h>
#define N 100
#define P 100000
#define NR 10
int fact[N],prim[N],r,rez[P];
int n,k;
char prime(int x)
{
if (x==1)
return 0;
if (x==2)
return 1;
if (x%2==0)
return 0;
int i;
for (i=3; i*i<=x; i+=2)
if (x%i==0)
return 0;
return 1;
}
void precalculate()
{
int i;
for (i=2; i<=N; i++)
if (prime(i))
prim[++r]=i;
}
int cbin(int x)
{
int st=1,dr=r,m;
while (st!=dr)
{
m=(st+dr)/2;
if (x<=prim[m])
dr=m;
else
st=m+1;
if (prim[st]>x)
--st;
return st;
}
void actualize(int x,int y)
{
int nr,numar;
numar=prim[x];
nr=prim[x];
while (nr<=y)
{
fact[numar]+=y/nr;
nr*=numar;
}
}
void prelucreaza()
{
int x,i,poz;
scanf("%d",&x);
poz=cbin(x);
for (i=1; i<=poz; i++)
actualize(i,x);
}
void mul(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= NR)
A[i] = (t += A[i] * B) % NR;
A[0] = i - 1;
}
int nrcif(int x)
{
int cont=0;
while (x)
{
x/=10;
cont++;
}
077. return cont;
}
int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
precalculate();
scanf("%d%d",&n,&k);
int i,j,t;
for (i=1; i<=n; i++)
prelucreaza();
rez[0]=1;
rez[1]=1;
for (i=1; i<=r; i++)
{
fact[prim[i]]%=k;
if (fact[prim[i]]!=0)
for (j=1; j<=k-fact[prim[i]]; j++)
mul(rez,prim[i]);
}
for (i=rez[0]; i>=1; i--)
printf("%d",rez[i]);
return 0;
}