Pagini recente » Cod sursa (job #420104) | Cod sursa (job #137871)
Cod sursa(job #137871)
#include <stdio.h>
#include <vector>
#include <fstream>
using namespace std;
#define in "factoriale.in"
#define out "factoriale.out"
#define dim 101
int N, K;
int X[dim], H[dim], M[3*dim];
bool Sel[dim];
vector<int> DivP;
void Power(int,int);
int main()
{
memset(Sel,0,sizeof(Sel));
memset(H,0,sizeof(H));
for ( int i = 2; i <= 100; i++ )
for ( int j = 2; i*j <= 100; j++ )
Sel[i*j] = 1;
for ( int i = 2; i <= 100; i++ )
if ( !Sel[i] ) DivP.push_back(i);
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &K);
for ( int i = 1; i <= N; i++ )
scanf("%d", &X[i]);
for ( int i = 1; i <= N; i++ )
{
for ( int k = 2; k <= X[i]; k++ )
{
int T = k;
for ( int j = 0; DivP[j]*DivP[j] <= T; j++ )
{
while ( T % DivP[j] == 0 )
{
H[DivP[j]]++;
T /= DivP[j];
}
}
if ( T > 1 ) H[T]++;
}
}
M[0] = M[1] = 1;
for ( int i = 2; i <= 100; i++ )
{
if ( H[i] == 0 ) continue;
if ( H[i] % K == 0 ) ;
else
{
Power( i, K - (H[i]%K) );
}
}
for ( int i = M[0]; i >= 1; i-- )
printf("%d", M[i]);
}
void Power(int B, int pow)
{
for ( ; pow; pow-- )
{
int i, t = 0;
for ( i = 1; i <= M[0] || t; i++, t/=10 )
M[i] = ( t += M[i]*B )%10;
M[0] = i-1;
}
}