Pagini recente » Cod sursa (job #818532) | Cod sursa (job #1037394) | Cod sursa (job #2202794) | Cod sursa (job #1711242) | Cod sursa (job #226415)
Cod sursa(job #226415)
#include <fstream>
#include <stdio.h>
using namespace std;
ifstream fin ("factoriale.in");
ofstream fout ("factoriale.out");
int sir[10000];
int n,k;
int rez[100000],nr,re[100000],auxnr;
int a[1000],nr1;
void div(int x)
{
while (x%2==0)
{
sir[2]++;
x>>=1;
}
for (int d=3;d*d<=x;d+=2)
while (!x%d)
{
sir[d]++;
x/=d;
}
if (x!=1)
sir[x]++;
}
void citire()
{
int aux;
fin>>n>>k;
for (int i=0;i<n;i++)
{
fin>>aux;
for (int aa=2;aa<=aux;aa++)
div(aa);
}
}
void calc()
{
for (int i=0;i<100;i++)
{
if (sir[i]%k==0)
sir[i]=0;
else
sir[i]=k-(sir[i]%k);
}
}
void inm(int x)
{
if (x<10)
{
a[0]=x;
nr1=1;
}
else
{
a[0]=x%10;
a[1]=x/10;
nr1=2;
}
int T=0;
auxnr=nr1+nr-1;
//memset(re,0,sizeof(re));
for (int i=0;i<nr+nr1+1;i++)
re[i]=0;
for (int i=0;i<nr1;i++)
{
T=0;
for (int j=0;j<nr;j++)
{
re[i+j]+=((rez[j]*a[i])+T);
T=re[i+j]/10;
re[i+j]%=10;
}
if (T)
{
re[i+nr]=T;
if (i+nr+1>auxnr);
auxnr=i+nr+1;
}
}
}
void sch()
{
for (int i=0;i<auxnr;i++)
rez[i]=re[i];
nr=auxnr;
}
void inmultire()
{
rez[0]=1;
nr=1;
for (int i=2;i<100;i++)
while (sir[i])
{
inm(i);
sir[i]--;
sch();
}
}
int main ()
{
citire();
calc();
inmultire();
for (int i=nr-1;i>=0;i--)
fout<<rez[i];
fout<<"\n";
return 0;
}