Cod sursa(job #664776)

Utilizator danalex97Dan H Alexandru danalex97 Data 20 ianuarie 2012 19:31:45
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>

using namespace std;

bool prim(int x)
{
    if (x == 2) return true;
    if (x % 2 == 0) return false;
    for (int i = 3; i * i <= x; i += 2)
        if (x % i == 0) return false;
    return true;
}

int N, K;
int X[102];
int result[100002];

void inm(int val)
{
    for (int i = 1; i <= result[0]; ++i)
        result[i] *= val;
    for (int i = 1; i <= result[0]; ++i)
        if (result[i] >= 10)
        {
            result[i + 1] += result[i] / 10;
            result[i] %= 10;
            result[0] = (i == result[0] ? i + 1 : result[0]);
        }
}

int main()
{
    ifstream fin("factoriale.in");
    ofstream fout("factoriale.out");
    result[0] = result[1] = 1;
    fin >> N >> K;
    for (int i = 1; i <= N; ++i)
        fin >> X[i];
    for (int i = 2; i < 100; ++i)
        if (prim(i))
        {
            int times = 0;
            for (int j = 1; j <= N; ++j)
            {
                int aux = i;
                while (aux <= X[j])
                    times += X[j] / aux,
                    aux *= i;
            }
            times = (times % K == 0 ? 0 : K - times % K);
            while (times--) inm(i);
        }
    for (int i = result[0]; i >= 1; --i)
        fout << result[i];
    fin.close();
    fout.close();
}