Cod sursa(job #2516014)

Utilizator mariusn01Marius Nicoli mariusn01 Data 30 decembrie 2019 00:47:44
Problema Factoriale Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
using namespace std;
int f[111], P[101], x[101], e[101];
int p, n, k, i, j;
int sol[100001];
int exponent(int x, int p) {
    int prod = p;
    int s = 0;
    while (prod <= x) {
        s+=x/prod;
        prod *= p;
    }
    return s;
}

void produs(int a[], int b){
    int t = 0;
    for(int i=1;i<=a[0];i++) {
        a[i] = a[i]*b+t;
        t = a[i]/10;
        a[i]%=10;
    }
    while (t) {
        a[++a[0]] = t%10;
        t/=10;
    }
}

int main () {
    ifstream fin ("factoriale.in");
    ofstream fout("factoriale.out");
    fin>>n>>k;
    for (i=1;i<=n;i++)
        fin>>x[i];
    for (i=2;i<=110;i++)
        if (f[i] == 0) {
            P[++p] = i;
            for (j=i+i;j<=110;j+=i)
                f[j] = 1;
        }

    for (i=1;i<=n;i++)
        for (j=1;j<=p;j++)
            e[j] += exponent(x[i], P[j]);

    sol[0] = sol[1] = 1;
    for (i=1;i<=p;i++) {
        if (e[i] == 0)
            break;
        while (e[i]%k != 0) {
            ///sol = sol * P[i];
            produs(sol, P[i]);
            e[i]++;
        }
    }
    ///fout<<sol;
    for(i=sol[0];i>=1;i--)
        fout<<sol[i];
    return 0;
}