Cod sursa(job #1450198)

Utilizator SwagginInMyJaysaaaaaaaaaaaas SwagginInMyJays Data 11 iunie 2015 20:25:06
Problema Factoriale Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <iostream>

using namespace std;

const int divm = 26, primes[] = {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};//25 prime

int n, div, ap[divm], fact, sol[divm << 3], tBf;

ifstream in ("factoriale.in");
ofstream out ("factoriale.out");

void desk (){
    for (int k = 0 ; k < divm && primes[k] <= fact; ++ k ){
            int Carry = primes[k];
            while (fact / Carry > 0 ) ap[primes[k]] += fact / Carry, Carry *= Carry;
    }
}
void Update (int factor){
    int T = 0;
    for (int i = 1 ; i <= sol[0]; ++ i){
            sol[i] = sol[i] * factor + T;
            T = sol[i] / 10;
            sol[i] %= 10;
    }
    for (; T; T /= 10)
        sol[++sol[0]] = (T % 10);
}
int main(){
    in >> n >> div;
    for (int i = 0 ; i < n ; i ++ )
            in >> fact,
            desk(),
            tBf = (fact > tBf ? fact : tBf);
    sol[1] = 1, sol[0] = 1;
    for (int k = 0 ; k < divm && primes[k] <= tBf; ++ k){
            if (!ap[primes[k]] || ap[primes[k]] % div == 0)
               continue;
            ap[primes[k]] = div - (ap[primes[k]] % div);
            cerr << ap[primes[k]] << " " << primes[k] << "\n";
            for (int d0 = 1; d0 <= ap[primes[k]]  ; ++ d0)
                Update(primes[k]);
    }
    for (int i = sol[0]; i; -- i)
        out << sol[i];
    return 0;
}