Cod sursa(job #1005891)

Utilizator poptibiPop Tiberiu poptibi Data 5 octombrie 2013 23:35:47
Problema Factoriale Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

const int NMAX = 110;

int N, K, X, Fact[NMAX], Ans[10 * NMAX], Pow[NMAX];

void Mult(int Val)
{
    int i, T = 0;
    for(i = 1; i <= Ans[0] || T; i ++, T /= 10)
        Ans[i] = (T += Ans[i] * Val) % 10;
    Ans[0] = i - 1;
}

int main()
{
    freopen("factoriale.in", "r", stdin);
    freopen("factoriale.out", "w", stdout);

    scanf("%i %i", &N, &K);
    for(int i = 1; i <= N; ++ i)
    {
        scanf("%i", &X);
        Fact[1] ++;
        Fact[X + 1] --;
    }

    for(int i = 1; i <= 100; ++ i)
    {
        Fact[i] += Fact[i - 1];
        int Temp = i;
        for(int j = 2; j * j <= Temp; ++ j)
            if(Temp % j == 0)
            {
                int Exp = 0;
                while(Temp % j == 0) Temp /= j, Exp ++;
                Pow[j] += Exp * Fact[i];
            }
        if(Temp > 1) Pow[Temp] += Fact[i];
    }


    Ans[0] = Ans[1] = 1;
    for(int i = 2; i <= 100; ++ i)
        if(Pow[i] > 0 && Pow[i] % K != 0)
        {
            int Exp = (Pow[i] / K + 1) * K;
            for(int j = 1; j <= Exp - Pow[i]; ++ j)
                Mult(i);
        }

    for(int i = Ans[0]; i; -- i)
        printf("%i", Ans[i]);

    return 0;
}