Pagini recente » Cod sursa (job #1059621) | Cod sursa (job #772983) | Cod sursa (job #694788) | Cod sursa (job #231821) | Cod sursa (job #2522585)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("factoriale.in");
ofstream fout("factoriale.out");
const int Nr = 25;
int N, K;
int ans[505];
int prime[] = { 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 };
map< int, int > f;
map< int, int >::iterator it;
inline void add( int x ){
if( f.find(x) == f.end() )
f[x] = 1;
else
f[x]++;
return;
}
void mul( int x ){
int t = 0;
for( int i = 1; i <= ans[0]; i++ ){
ans[i] = ans[i] * x + t;
t = ans[i] / 10;
ans[i] %= 10;
}
while( t != 0 ){
ans[ ++ans[0] ] = t % 10;
t /= 10;
}
}
int main(){
fin >> N >> K;
for( int i = 1; i <= N; i++ ){
int X; fin >> X;
for( int x = 2; x <= X; x++ ) {
int aux = x;
for (int j = 0; j < Nr && aux != 1; j++) {
while (aux % prime[j] == 0) {
add( prime[j] );
aux /= prime[j];
}
}
}
}
ans[0] = ans[1] = 1;
for( it = f.begin(); it != f.end(); it++ ){
int b = (*it).first, p = (*it).second;
if( p % K == 0 )
continue;
for( int i = 1; i <= K * ((p / K) + 1) - p; i++ )
mul( b );
}
for( int i = ans[0]; i >= 1; i-- )
fout << ans[i];
return 0;
}