Pagini recente » Cod sursa (job #201870) | Cod sursa (job #501329) | Diferente pentru warm-up-2019/solutii/shoturi intre reviziile 82 si 83 | Cod sursa (job #2105714) | Cod sursa (job #1005891)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int NMAX = 110;
int N, K, X, Fact[NMAX], Ans[10 * NMAX], Pow[NMAX];
void Mult(int Val)
{
int i, T = 0;
for(i = 1; i <= Ans[0] || T; i ++, T /= 10)
Ans[i] = (T += Ans[i] * Val) % 10;
Ans[0] = i - 1;
}
int main()
{
freopen("factoriale.in", "r", stdin);
freopen("factoriale.out", "w", stdout);
scanf("%i %i", &N, &K);
for(int i = 1; i <= N; ++ i)
{
scanf("%i", &X);
Fact[1] ++;
Fact[X + 1] --;
}
for(int i = 1; i <= 100; ++ i)
{
Fact[i] += Fact[i - 1];
int Temp = i;
for(int j = 2; j * j <= Temp; ++ j)
if(Temp % j == 0)
{
int Exp = 0;
while(Temp % j == 0) Temp /= j, Exp ++;
Pow[j] += Exp * Fact[i];
}
if(Temp > 1) Pow[Temp] += Fact[i];
}
Ans[0] = Ans[1] = 1;
for(int i = 2; i <= 100; ++ i)
if(Pow[i] > 0 && Pow[i] % K != 0)
{
int Exp = (Pow[i] / K + 1) * K;
for(int j = 1; j <= Exp - Pow[i]; ++ j)
Mult(i);
}
for(int i = Ans[0]; i; -- i)
printf("%i", Ans[i]);
return 0;
}