Pagini recente » Borderou de evaluare (job #978910) | Borderou de evaluare (job #159852) | Borderou de evaluare (job #2786237) | Cod sursa (job #927578) | Cod sursa (job #2915267)
#include <fstream>
#include <vector>
using namespace std;
vector<int> v{ 1 };
void multiply(int f, int exp) {
unsigned long long temp = 0;
while (exp > 0) {
for (unsigned int i = 0; i < v.size(); i++) {
temp += v[i] * f;
v[i] = temp % 10;
temp /= 10;
}
while (temp > 0) {
v.push_back(temp % 10);
temp /= 10;
}
exp--;
}
}
int main() {
ifstream fin("factoriale.in");
ofstream fout("factoriale.out");
int n, k;
fin >> n >> k;
int f[25] = {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 p[25] = {};
for (int i = 0; i < n; i++) {
int x;
fin >> x;
for (int j = 2; j <= x; j++) {
int d = 0;
int aux = j;
while (aux > 1) {
if (aux % f[d] == 0) {
p[d] += 1;
aux /= f[d];
} else d++;
}
}
}
for (int i = 0; i < 25; i++)
if (p[i] > 0 && p[i] % k != 0) {
int exp = k - (p[i] % k);
multiply(f[i], exp);
}
for (int i = v.size() - 1; i >= 0; i--)
fout << v[i];
fin.close();
fout.close();
return 0;
}