Pagini recente » Cod sursa (job #2034712) | Cod sursa (job #1514666) | Cod sursa (job #2833745) | Cod sursa (job #360848) | Cod sursa (job #2113404)
#include <bits/stdc++.h>
#define ELMAX 100
using namespace std;
ifstream fin("factoriale.in");
ofstream fout("factoriale.out");
int n, k, smen[ELMAX+2], ap[ELMAX+2];
int na, nb, a[12], b[10002];
void desc(int val)
{
int copie=val, f=3, e=0;
while(val%2==0)
{
e++;
val/=2;
}
ap[2]+=e*smen[copie];
for(f=3; f*f<=copie; f+=2)
{
e=0;
while(val%f==0)
{
e++;
val/=f;
}
ap[f]+=e*smen[copie];
}
if(val) ap[val]=smen[copie];
}
void inmultire()
{
int i, j, k, t, sol[10002]= {0};
for(i=1; i<=nb; i++)
{
t=0;
k=i-1;
for(j=1; j<=na || t!=0; j++)
{
++k;
sol[k]=sol[k]+b[i]*a[j]+t;
t=sol[k]/10;
sol[k]%=10;
}
}
for(i=1; i<=k; i++)
b[i]=sol[i];
nb=k;
}
void produs(int val, int putere)
{
int i;
memset(a,0,sizeof(a));
na=0;
while(val)
{
a[++na]=val%10;
val/=10;
}
for(i=1; i<=putere; i++)
inmultire();
}
int main()
{
int i, x;
fin>>n>>k;
smen[1]=n, b[1]=1, nb=1;
for(i=1; i<=n; i++)
{
fin>>x;
smen[x+1]--;
}
///SMEN
for(i=1; i<=ELMAX; i++) smen[i]+=smen[i-1];
for(i=2; i<=ELMAX; i++)
if(smen[i]) desc(i);
for(i=2; i<=ELMAX; i++)
if(ap[i]%k!=0)
produs(i,k-ap[i]%k);
for(i=nb; i>=1; i--)
fout<<b[i];
fout<<'\n';
return 0;
}