Pagini recente » Cod sursa (job #3288201) | Cod sursa (job #1542155) | Cod sursa (job #2234497) | Cod sursa (job #2895253) | Cod sursa (job #1746534)
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int MAX_DIGITS = 10000;
const int MAX_PRIME = 100;
const int NR_PRIME = 25;
bool ciur[MAX_PRIME + 5];
int prime[NR_PRIME + 5], fact[NR_PRIME + 5];
class HugeN{
private: int x[MAX_DIGITS + 5];
public:
HugeN(){
memset(x, 0, sizeof(x));
x[0] = 1;
}
HugeN(int k){
memset(x, 0, sizeof(x));
do{
x[++x[0]] = k % 10;
k /= 10;
}while (k);
}
void print(){
for (int i = x[0]; i >= 1; i --)
printf("%d", x[i]);
printf("\n");
}
HugeN operator * (int k);
};
HugeN HugeN::operator * (int k){
HugeN temp;
int i, tr = 0, aux;
temp.x[0] = x[0];
for (i = 1; i <= temp.x[0]; i ++){
aux = x[i] * k + tr;
temp.x[i] = aux % 10;
tr = aux / 10;
}
if (tr)
temp.x[++temp.x[0]] = tr;
return temp;
}
void PrimeN(){
int i, j, k;
prime[1] = 2; k = 1;
for (i = 3; i <= MAX_PRIME; i += 2)
if (ciur[i] == false){
prime[++k] = i;
for (j = i * i; j <= MAX_PRIME; j += 2 * i)
ciur[j] = true;
}
}
int Legendre(int n, int k){
int aux = k, ans = 0;
while (aux <= n){
ans += n / aux;
aux *= k;
}
return ans;
}
void Descomp(int n){
int i;
for (i = 1; prime[i] <= n && i <= NR_PRIME; i ++)
fact[i] += Legendre(n, prime[i]);
}
int main(){
freopen("factoriale.in", "r", stdin);
freopen("factoriale.out", "w", stdout);
int n, k, i, x, j;
scanf("%d%d", &n, &k);
PrimeN();
for (i = 1; i <= n; i ++){
scanf("%d", &x);
Descomp(x);
}
HugeN a(1);
for (i = 1; i <= NR_PRIME && fact[i]; i ++)
for (j = 1; j <= (k - fact[i] % k) % k; j ++)
a = a * prime[i];
a.print();
return 0;
}