Cod sursa(job #779670)

Utilizator maritimCristian Lambru maritim Data 18 august 2012 14:47:01
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>

FILE *f = fopen("factoriale.in","r");
FILE *g = fopen("factoriale.out","w");

#define MaxN 130
#define MaxNumarMare 20000
#define ll long long

int N,K;
int A[MaxN];
int Best[MaxN];
int SolV[MaxNumarMare] = {1,1};
ll Sol = 1;

void citire(void)
{
	fscanf(f,"%d %d",&N,&K);
	for(int i=1;i<=N;i++)
		fscanf(f,"%d ",&A[i]);
}

inline void Descompune(int a)
{
	for(int i=2;i<=a;i++)
		if(a%i == 0)
			for(;a%i == 0;++Best[i],a/= i);
}

inline int Valoare(int x)
{
	if(x%K == 0)
		return 0;
	
	return (x/K+1)*K-x;
}

inline void Inmultire(int A[],int c)
{
	int aux = 0;
	
	for(int i=1;i<=A[0];i++)
		aux = aux+A[i]*c,A[i] = aux%10,aux/= 10;
	
	for(;aux;aux/=10)
		A[++A[0]] = aux%10;
}

void Rezolvare(void)
{
	for(int i=1;i<=N;i++)
		for(int j=2;j<=A[i];j++)
			Descompune(j);
		
	for(int i=1;i<=100;i++)
		for(int j=Valoare(Best[i]);j;j--)
			Inmultire(SolV,i);
}

int main()
{
	citire();
	Rezolvare();
	
	for(int i=SolV[0];i;i--)
		fprintf(g,"%d",SolV[i]);
	fprintf(g,"\n");
}