Cod sursa(job #2915267)

Utilizator alin.gabrielAlin Gabriel Arhip alin.gabriel Data 22 iulie 2022 11:02:46
Problema Factoriale Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
using namespace std;

vector<int> v{ 1 };

void multiply(int f, int exp) {
    unsigned long long temp = 0;
    while (exp > 0) {
        for (unsigned int i = 0; i < v.size(); i++) {
            temp += v[i] * f;
            v[i] = temp % 10;
            temp /= 10;
        }
        while (temp > 0) {
            v.push_back(temp % 10);
            temp /= 10;
        }
        exp--;
    }
}

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

    int n, k;
    fin >> n >> k;
    int f[25] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 
                 29, 31, 37, 41, 43, 47, 53, 59, 
                 61, 67, 71, 73, 79, 83, 89, 97};
    int p[25] = {};
    for (int i = 0; i < n; i++) {
        int x;
        fin >> x;
        for (int j = 2; j <= x; j++) {
            int d = 0;
            int aux = j;
            while (aux > 1) {
                if (aux % f[d] == 0) {
                    p[d] += 1;
                    aux /= f[d];
                } else d++;
            }
        }
    }

    for (int i = 0; i < 25; i++)
        if (p[i] > 0 && p[i] % k != 0) {
            int exp = k - (p[i] % k);
            multiply(f[i], exp);
        }

    for (int i = v.size() - 1; i >= 0; i--)
        fout << v[i];

    fin.close();
    fout.close();
    return 0;
}