Cod sursa(job #2523443)

Utilizator mihnea.anghelMihnea Anghel mihnea.anghel Data 14 ianuarie 2020 09:18:10
Problema Factoriale Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>

using namespace std;
ifstream f("factoriale.in");
ofstream g("factoriale.out");
int p[50], v[110], e[50], sol[100009];
int n, i, ok, j, nr, k;

int exponent ( int x, int p ){
    int prod = p, sol = 0;
    while ( prod <= x ){
        sol += x/prod;
        prod *= p;
    }
    return sol;
}

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;
    }
    return;
}


int main()
{
    f>>n>>k;
    for ( i = 2; i <= 100; i++ ){
        ok = 0;
        for ( j=2; ok == 0 && j*j <= i; j++ )
            if ( i % j == 0 )
                ok = 1;
        if ( !ok )
            p[++nr] = i;
    }

    for ( i=1; i <= n; i++ )
        f>>v[i];

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

    sol[0] = sol[1] = 1;
    for ( i=1; i <= nr; i++ ){
        if ( !e[i] )
            break;
        while ( e[i]%k ){
            produs( sol, p[i] );
            e[i]++;
        }
    }
    for ( i=sol[0]; i; i-- )
        g<<sol[i];
    return 0;
}