Pagini recente » Cod sursa (job #2575696) | Cod sursa (job #1280808) | Cod sursa (job #2247586) | Cod sursa (job #1300634) | Cod sursa (job #1894737)
#include<bits/stdc++.h>
using namespace std;
int n,k,v[105],nr[10005],baza[10005],sol[10005],m,prime[105],dp,e[105],t;
bool ciur[105];
inline int max(int a,int b)
{
return a>b?a:b;
}
void inmulteste(int a[],int b[])
{
int c[10000],t=0;
memset(c,0,sizeof(c));
for(int i=1;i<=a[0];i++)
{
int j;
for(j=1;j<=b[0] || t;j++)
{
t+=(c[i+j-1]+a[i]*b[j]);
c[i+j-1]=t%10;
t/=10;
}
if((i+j-2)>c[0]) c[0]=i+j-2;
}
memcpy(a,c,sizeof(c));
}
void conversie(int a[],int x)
{
memset(a,0,sizeof(a));
int da=0;
while(x)
{
a[++da]=x%10;
x/=10;
}
a[0]=da;
}
void afiseaza(int a[])
{
for(int i=a[0];i>=1;i--) printf("%d",a[i]);
printf("\n");
}
int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
m=max(m,v[i]);
}
for(int i=4;i<=m;i+=2) ciur[i]=1;
for(int i=3;i<m;i+=2)
if(!ciur[i])
for(int j=i+i;j<=m;j+=i) ciur[j]=1;
for(int i=2;i<=m;i++)
if(!ciur[i]) prime[++dp]=i;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=dp;j++)
{
int x=prime[j];
int ex=0;
while(x<=v[i])
{
ex=ex+(v[i]/x);
x=x*prime[j];
}
e[j]+=ex;
}
}
for(int i=1;i<=dp;i++)
e[i]=(k-(e[i]%k))%k;
conversie(sol,1);
for(int i=1;i<=dp;i++)
{
t=e[i];
if(t)
{
conversie(nr,1);
conversie(baza,prime[i]);
while(t)
{
if(t&1)
{
inmulteste(nr,baza);
t--;
}
else
{
inmulteste(baza,baza);
t>>=1;
}
}
inmulteste(sol,nr);
}
}
afiseaza(sol);
return 0;
}