Pagini recente » Cod sursa (job #2482650) | Cod sursa (job #1588440) | Cod sursa (job #2567451) | Cod sursa (job #199382) | Cod sursa (job #226417)
Cod sursa(job #226417)
#include <fstream>
#include <stdio.h>
#include <math.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[100000],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(long long x)
{
auxnr=nr;
int T=0;
for (int i=0;i<nr1+nr+1;i++)
re[i]=0;
for (int j=0;j<nr;j++)
{
re[j]+=((rez[j]*x)+T);
T=re[j]/10;
re[j]%=10;
}
while (T)
{
re[auxnr++]=T;
T/=10;
}
}
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++)
if (sir[i])
{
inm(pow(i,sir[i]));
sch();
}
}
int main ()
{
citire();
calc();
inmultire();
for (int i=nr-1;i>=0;i--)
fout<<rez[i];
fout<<"\n";
return 0;
}