Cod sursa(job #1810957)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 20 noiembrie 2016 18:30:15
Problema Factoriale Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>

using namespace std;
ifstream fin ("factoriale.in");
ofstream fout("factoriale.out");
long long  i,j,b[110],n,k,aux,h,e[110],f[110],nr,p[110],z,x;
int s[110];

void Mult(int H[], long X)
/* H <- H*X */
{ int i;
  long T=0;

  for (i=1;i<=H[0];i++)
    { H[i]=H[i]*X+T;
      T=H[i]/10;
      H[i]=H[i]%10;
    }
  while (T) /* Cat timp exista transport */
    { H[++H[0]]=T%10;
      T/=10;
    }
}


long long ridicare(long long a, long long b)
{
    long long p=1;
    while(b!=0)
    {
        if(b%2==1) {
            p*=a;
        }
        a*=a;
        b/=2;
    }
    return p;
}

int main ()
{
    for(i=2;i<=100;i++)
        if(b[i]==0)
        {
            p[++h]=i;
            for(j=i+i;j<=100;j+=i)
                b[j]=1;
        }
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        for(j=1;j<=x;j++)
            f[j]++;
        if(x>z)
            z=x;
    }
    for(i=2;i<=z;i++)
    {
        aux=i;
        for(j=1;j<=h;j++)
        {
            if(aux%p[j]==0)
            {
                nr=0;
                while(aux%p[j]==0)
                {
                    aux/=p[j];
                    nr++;
                }
                e[p[j]]+=nr*f[i];
            }
        }
        if(aux!=1)
            e[aux]+=f[i];
    }
    s[0]=1;
    s[1]=1;

    for(i=1;i<=100;i++)
    {
        if(e[i]!=0)
            if(e[i]%k!=0)
            {
                aux=k-e[i]%k;
                while(aux>0)
                {
                    Mult(s, i);
                    aux--;
                }
            }
    }
    for(i=s[0];i>=1;i--)
        fout<<s[i];
    fin.close();
    fout.close();
    return 0;
}