Cod sursa(job #658976)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 9 ianuarie 2012 20:51:38
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <cstdio>

#define NMax 105

using namespace std;

int N, K, X[NMax], E[NMax], S[NMax];

inline bool Prime (int X)
{
    for (int i=2; i*i<=X; ++i)
    {
        if (X%i==0)
        {
            return false;
        }
    }
    return true;
}

void Read ()
{
    freopen ("factoriale.in", "r", stdin);
    scanf ("%d %d", &N, &K);
    for (int i=1; i<=N; ++i)
    {
        scanf ("%d", &X[i]);
    }
}

inline void Multiply (int A[], int B)
{
    int i, T=0;
    for (i=1; i<=A[0] or T>0; ++i, T/=10)
    {
        T+=(A[i]*B);
        A[i]=T%10;
    }
    A[0]=i-1;
}

void Solve ()
{
    for (int i=2; i<100; ++i)
    {
        if (Prime (i))
        {
            for (int j=1; j<=N; ++j)
            {
                int Powi=i;
                while (Powi<=X[j])
                {
                    E[i]+=(X[j]/Powi);
                    Powi*=i;
                }
            }
            if (E[i]%K!=0)
            {
                E[i]=K-(E[i]%K);
            }
            else
            {
                E[i]=0;
            }
        }
    }
    S[0]=S[1]=1;
    for (int i=2; i<100; ++i)
    {
        for (; E[i]>0; --E[i])
        {
            Multiply (S, i);
        }

    }
}

void Print ()
{
    freopen ("factoriale.out", "w", stdout);
    for (int i=S[0]; i>0; --i)
    {
        printf ("%d", S[i]);
    }
    printf ("\n");
}

int main()
{
    Read ();
    Solve ();
    Print ();
    return 0;
}