Cod sursa(job #2911214)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 27 iunie 2022 16:31:27
Problema Factoriale Scor 80
Compilator cpp-64 Status done
Runda 3_iulie Marime 1.18 kb
#include <fstream>

#define DIM 100

using namespace std;

ifstream fin("factoriale.in");
ofstream fout("factoriale.out");

int n, k, x;
int f[DIM + 5];
int sol[10 * DIM + 1];

void primeFact(int val) {
    for (int d = 2; val != 1 && d <= val / d; d++) {
        int e = 0;
        while (val % d == 0) {
            e++;
            val /= d;
        }

        if (e)
            f[d] += e;
    }
    if (val != 1)
        f[val]++;
}

void multiply(int bigNum[], int val) {
    int t = 0;
    for (int i = 1; i <= bigNum[0]; i++) {
        bigNum[i] = bigNum[i] * val + t;
        t = bigNum[i] / 10;
        bigNum[i] %= 10;
    }
    while (t) {
        bigNum[++bigNum[0]] = t % 10;
        t /= 10;
    }
}

int main() {
    fin >> n >> k;
    for (int i = 1; i <= n; i++) {
        fin >> x;
        for (int j = 2; j <= x; j++)
            primeFact(j);
    }

    sol[0] = sol[1] = 1;
    for (int i = 2; i <= DIM; i++) {
        if (f[i]) {
            int exp = k - (f[i] % k);
            if (exp != k) {
                for (int j = 1; j <= exp; j++)
                    multiply(sol, i);
            }
        }
    }

    for (int i = sol[0]; i >= 1; i--)
        fout << sol[i];

    return 0;
}