Pagini recente » Cod sursa (job #1958839) | Cod sursa (job #571295) | Cod sursa (job #1760538) | Cod sursa (job #210654) | Cod sursa (job #1453146)
#include <fstream>
#include <iostream>
#define GOPro long long
using namespace std;
const int divm = 203, 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 ; primes[k] && k < divm && primes[k] <= fact; ++ k ){
GOPro Carry = primes[k];
while (fact / Carry > 0 ) ap[primes[k]] += fact / Carry, Carry *= primes[k];
}
}
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;
}