Cod sursa(job #771510)

Utilizator SteveStefan Eniceicu Steve Data 26 iulie 2012 10:32:38
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <algorithm>

using namespace std;

int N, K;
int v[1005];
int x[1005];
int A[100005];

void Citire () {
	ifstream fin ("factoriale.in");
	fin >> N >> K;
	for (int i = 1; i <= N; i++)
		fin >> v[i];
	fin.close ();
	sort (v + 1, v + N + 1);
}

void Business () {
	int a;
	v[0] = 1;
	for (int i = 1; i <= N; i++)
	{
		for (int u = v[i - 1] + 1; u <= v[i]; u++)
		{
			a = u;
			for (int j = 2; j * j <= a; j++)
			{
				if (a % j == 0)
				{
					while (a % j == 0)
					{
						a /= j;
						x[j] += N - i + 1;
					}
				}
			}
			if (a > 1) x[a] += N - i + 1;
		}
	}
}

void mul (int A[], int x) {
	int t = 0, i;
	for (i = 1; i <= A[0] || t; i++)
	{
		A[i] = A[i] * x + t;
		t = A[i] / 10;
		A[i] %= 10;
	}
	A[0] = i - 1;
}

void Aflare () {
	A[0] = 1;
	A[1] = 1;
	for (int i = 2; i <= 97; i++)
	{
		if (x[i] % K)
		{
			for (int j = 0; j < K - x[i] % K; j++)
				mul (A, i);
		}
	}
}

void Scriere () {
	ofstream fout ("factoriale.out");
	for (int i = A[0]; i >= 1; i--)
		fout << A[i];
	fout.close ();
}

int main () {
	Citire ();
	Business ();
	Aflare ();
	Scriere ();
	return 0;
}