Cod sursa(job #2915251)

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

vector<int> v{ 1 };

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

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;
            if (p[i] > k)
                exp = k - (p[i] % k);
            else
                exp = k - p[i];
            while (exp > 0) {
                multiply(f[i]);
                exp--;
            }
        }

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

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