Cod sursa(job #504936)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 29 noiembrie 2010 17:49:45
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#define DIM 101
#define ERA 25

int N, K, F;
int ciur[DIM], A[DIM], P[ERA];
int REZ[1000];

void inmulteste (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 cciur ()
{
	int i, j, x = 0;
	for (i = 2; i < DIM; ++i)
		if ( !ciur[i] )
		{
			ciur [++x] = i;
			for (j = i + i; j < DIM; j += i)
				ciur[j] = 1;
		}
}

void factori (int X)
{
//	int d, r = sqrt (X);
	for (int d = 1; d <= ERA; ++d)
		while ( !(X % ciur[d]) )
		{
			P[d] ++;
			X /= ciur[d];
		}
}

void cit ()
{
	int i, f;
	
	scanf ("%d%d", &N, &K);
	for (i = 1; i <= N; ++i)
	{
		scanf ("%d", &F);
		for (f = 2; f <= F; ++f)
			factori (f);	
	}
}

void calc ()
{
	REZ[0] = REZ[1] = 1;
	for (int d = 1, e; P[d]; ++d)
	{
		if (P[d] % K) e = K - P[d] % K;
		else e = 0;
		
		while ( e-- )
			inmulteste (REZ, ciur[d]);		
	}
}

void afs ()
{
	for (int i = REZ[0]; i > 0; --i)
		printf ("%d", REZ[i]);
}

int main ()
{
	freopen ("factoriale.in", "r", stdin);
	freopen ("factoriale.out", "w", stdout);
	
	cciur ();
	cit ();
	calc ();
	afs ();
//	factori (750);
	
	return 0;
}