Pagini recente » Cod sursa (job #939160) | Cod sursa (job #940454) | Cod sursa (job #2837956) | Cod sursa (job #3195707) | Cod sursa (job #139586)
Cod sursa(job #139586)
#include <stdio.h>
#include <string.h>
const int N_MAX = 128;
int v[N_MAX], fac[N_MAX];
void factori(int X)
{
int i, wx = X;
if (X % 2 == 0) {
fac[2] ++;
X /= 2;
while (X % 2 == 0) {
fac[2] ++;
X /= 2;
}
}
for (i = 3; i * i <= wx; i += 2) {
while (X % i == 0) {
fac[i] ++;
X /= i;
}
}
if (X != 1) fac[X] ++;
}
int l[400], rez[400];
void MULm(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
void MUL(int A[], int B[])
{
int i, j, t, C[400];
memset(C, 0, sizeof(C));
for (i = 1; i <= A[0]; i++)
{
for (t=0, j=1; j <= B[0] || t; j++, t/=10)
C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
if (i + j - 2 > C[0]) C[0] = i + j - 2;
}
memcpy(A, C, sizeof(C));
}
int main()
{
freopen("factoriale.in", "r", stdin);
#ifndef _SCREEN_
freopen("factoriale.out", "w", stdout);
#endif
int N, K, i;
scanf("%d %d\n", &N, &K);
for (i = 1; i <= N; i ++) {
scanf("%d ", &v[i]);
}
int j;
for (i = 1; i <= N; i ++) {
for (j = 1; j <= v[i]; j ++) {
factori(j);
}
}
int pt, w;
rez[0] = 1, rez[1] = 1;
for (i = 1; i <= 100; i ++) {
// printf("i = %d fac = %d\n", i, fac[i]);
if (fac[i] % K != 0) {
pt = K - (fac[i] % K);
memset(l, 0, sizeof(l));
w = i;
while (w > 0) {
l[++ l[0]] = w % 10;
w /= 10;
}
for (j = 2; j <= pt; j ++) MULm(l, i);
MUL(rez, l);
}
}
for (i = rez[0]; i >= 1; i --) {
printf("%d", rez[i]);
}
return 0;
}