Pagini recente » Cod sursa (job #2241025) | Cod sursa (job #2990902) | Cod sursa (job #288285) | Cod sursa (job #1658101) | Cod sursa (job #1355871)
#include <fstream>
#include <algorithm>
#define DIM 101
#define LEN 100000
#define infile "factoriale.in"
#define outfile "factoriale.out"
using namespace std;
ifstream f(infile);
ofstream g(outfile);
bool ok[DIM];
int primes[DIM], exponents[DIM];
int res[LEN], aux[LEN], tmp[LEN];
void atrib(int A[], int B[]) {
A[0] = B[0];
for (int i = 1; i <= A[0]; ++i)
A[i] = B[i];
}
void multiply(int A[], int B[], int C[]) {
int t = 0;
C[0] = A[0] + B[0] - 1;
for (int i = 1; i <= A[0] + B[0]; ++i)
C[i] = 0;
for (int i = 1; i <= A[0]; i++)
for (int j = 1; j <= B[0]; j++)
C[i + j - 1] += A[i] * B[j];
for (int i = 1; i <= C[0]; i++)
{
t = (C[i] += t) / 10;
C[i] %= 10;
}
if (t)
C[++C[0]] = t;
}
int main() {
int n, k;
f >> n >> k;
int primesCount = 0;
for (int i = 2; i < DIM; ++i) {
if (ok[i] == 1)
continue;
primes[++primesCount] = i;
for (int j = i + i; j < DIM; j += i)
ok[j] = 1;
}
for (int i = 1; i <= n; ++i) {
int val;
f >> val;
for (int j = 1; j <= primesCount; ++j) {
for (int temp = primes[j]; temp <= val; temp *= primes[j])
exponents[j] += val / temp;
}
}
res[0] = res[1] = 1;
for (int i = 1; i <= primesCount; ++i) {
if (exponents[i] % k == 0)
continue;
for (int j = 1; j <= k - exponents[i] % k; ++j) {
if (primes[i] / 10)
aux[0] = 2, aux[1] = primes[i] % 10, aux[2] = primes[i] / 10;
else
aux[0] = 1, aux[1] = primes[i];
multiply(res, aux, tmp);
atrib(res, tmp);
}
}
for (int i = res[0]; i; --i)
g << res[i];
return 0;
}
//Trust me, I'm the Doctor!