Cod sursa(job #474832)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 5 august 2010 10:46:06
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<cstdio>
typedef int Huge[1001];
int n,k,nrp,x[101],pr[101],fac[101];
Huge v;
void read()
{
    freopen("factoriale.in","r",stdin);
    freopen("factoriale.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        scanf("%d",&x[i]);
}
void ciur()
{
    int f[101]={false};
    for(int i=2;i<=100;i++)
        if(!f[i])
        {
            pr[++nrp]=i;
            for(int j=i*i;j<=100;j+=i)
                f[j]=true;
        }
}
int ffac(int n,int p)
{
    int x=0;
    while(n)
    {
        x+=n/p;
        n/=p;
    }
    return x;
}
void init()
{
    ciur();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=nrp;j++)
            fac[j]+=ffac(x[i],pr[j]);
}
void inm(Huge A, int B)
{
      int i,t=0;
      for(i=1; i<=A[0] || t;i++,t/= 10)
              A[i]=(t+=A[i]*B)%10;
      A[0]=i-1;
}
void afis(Huge A)
{
    for(int i=A[0];i>0;i--)
        printf("%d",A[i]);
}
void solve()
{
    v[0]=v[1]=1;
    for(int i=1;i<=nrp;i++)
        if(fac[i]%k!=0)
            for(int j=1;j<=k-(fac[i]%k);j++)
                inm(v,pr[i]);
    afis(v);
}
int main()
{
    read();
    init();
    solve();
    return 0;
}