Pagini recente » Cod sursa (job #308783) | Cod sursa (job #1496172) | Cod sursa (job #526695) | Cod sursa (job #2628023) | Cod sursa (job #2527797)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream f("factoriale.in");
std::ofstream g("factoriale.out");
const int NMAX = 120;
const int SIZE = 1000002;
std::vector<int>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};
int n,k,v[NMAX],fr[NMAX],sol[SIZE];
void update(int nr){
for(int i = 0;i < primes.size();++i){
while(nr % primes[i] == 0 && nr > 1){
fr[primes[i]]++;
nr /= primes[i];
}
}
//if(nr != 1)
// fr[nr]++;
}
void multiply(int *sol,int value){
int t{};
for(int i = 1;i <= sol[0];++i){
sol[i] = sol[i] * value + t;
t = sol[i] / 10;
sol[i] %= 10;
}
if(t)
sol[++sol[0]] = t;
}
int main(){
f >> n >> k;
for(int i = 1;i <= n;++i){
f >> v[i];
for(int j = 2;j <= v[i];++j)
update(j);
}
sol[0] = sol[1] = 1;
for(int i = 0;i < primes.size();++i)
if(fr[primes[i]] != 0 && fr[primes[i]] % k != 0)
for(int j = 1;j <= k - (fr[primes[i]] % k) ;++j)
multiply(sol,primes[i]);
for(int i = sol[0];i >= 1;--i)
g << sol[i];
return 0;
}