Cod sursa(job #3224480)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 15 aprilie 2024 14:58:17
Problema Factoriale Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("factoriale.in");
ofstream fout("factoriale.out");
const int baza = 10000;
int n, k, i, j, x[102], ma;
int m[102], r[102] = {1, 1};

static inline void Prod(int x) {
    int t = 0, i = 1;
    while(i <= r[0] || t) {
        t += r[i] * x;
        r[i] = t % baza;
        t /= baza;
        i++;
    }
    r[0] = i - 1;
}

static inline void Desc(int n, int mult) {
    int d = 2;
    while(d * d <= n) {
        int e = 0;
        while(n % d == 0) {
            e++;
            n /= d;
        }
        if(e) m[d] += e * mult;

        d++;
    }
    if(n > 1) m[n] += mult;
}

int main() {
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin >> n >> k;
    for(i = 1; i <= n; i++) {
        fin >> x[i];
        ma = max(ma, x[i]);
    }

    for(i = 1; i <= ma; i++) {
        int mult = 0;
        for(j = 1; j <= n; j++) {
            if(i <= x[j]) mult++;
        }

        Desc(i, mult);
    }

    for(i = 1; i <= ma; i++) {
        if(m[i] == 0) continue;

        if(m[i] % k != 0) {
            for(j = 1; j <= k - m[i] % k; j++) Prod(i);
        }
    }

    fout << r[r[0]];
    for(i = r[0] - 1; i >= 1; i--) fout << setfill('0') << setw(4) << r[i];

    return 0;
}