Cod sursa(job #1815165)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 24 noiembrie 2016 21:37:12
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <bitset>
#define DIM 101
using namespace std;
int n,i,j,d,p,k,k2,x,e;
int v[DIM],prim[DIM],a[500001],el,ciur[DIM];
//bitset <DIM> ciur;
ifstream fin ("factoriale.in");
ofstream fout ("factoriale.out");
void produs (int nr){
    int t = 0;
    for (int i=1;i<=a[0];i++){
        a[i] = a[i]*nr + t;
        t = a[i]/10;
        a[i] %= 10;
    }
    while (t != 0){
        a[++a[0]] = t%10;
        t/=10;
    }

}
int main (){
// 48 = 2*2*2*2*3
    fin>>n>>k;
    for (i=2;i<=100;i++){
        if (ciur[i] == 0){
            prim[++el] = i;
            for (j=i+i;j<=100;j+=i)
                ciur[j] = 1;

        }
    }
    for (i=1;i<=n;i++){
        fin>>x;
        for (j=1;j<=el;j++){
            // descompunem in factori primi fiecare numar din factorila
            // si adaugam la exponent
            p = prim[j];
            while (p<=x){
                v[prim[j]] += x/p;
                p *= prim[j];
            }

        }
    }
    a[0] = a[1] = 1;
    for (i=1;i<=el;i++){
        if (v[prim[i]]%k != 0){//*****************************
            // adunam la solutie f[i] la puterea k2-v[i]
//            nr = f[i];
            for (j=1;j<=k-v[prim[i]]%k;j++)
                produs (prim[i]);
        }
    }
    for (i=a[0];i>=1;i--)
        fout<<a[i];
    // exponentul trebuie sa fie k;


    return 0;
}