Cod sursa(job #311990)

Utilizator GulosSerban Petrescu Gulos Data 4 mai 2009 21:06:03
Problema Factoriale Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#include<iostream>

using namespace std;

int main(){
	ifstream fin("factoriale.in");
	ofstream fout("factoriale.out");
	int j,i,n,k,x,prim[25]={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};
	int fact[101][25];
	for (i=0;i<100;i++)
		for (j=0;j<25;j++)
			fact[i][j]=0;
	fin>>n>>k;
	for (i=2;i<101;i++){
		x=i;
		j=-1;
		while (x>1){
			j++;
			if (x%prim[j]==0){
				x/=prim[j];
				fact[i][j]++;
				j=-1;
			}
		}
		for (j=0;j<25;j++)
			fact[i][j]+=fact[i-1][j];
	}
	for (i=0;i<n;i++){
		fin>>x;
		for (j=0;j<25;j++)
			fact[0][j]+=fact[x][j];
		
	}
	for (i=0;i<25;i++){
		if (fact[0][i]%k!=0)
			fact[0][i]=k-fact[0][i]%k;
		else
			fact[0][i]=0;
	}
	int nr[500];
	for (i=0;i<500;i++)
		nr[i]=0;
	nr[0]=1;x=n=0;j=1;
	for (i=0;i<25;i++){
		for (;fact[0][i]>0;fact[0][i]--){
			for (n=0;n<j;n++)
				nr[n]*=prim[i];
			n=-1;
			do{
				n++;
				nr[n]+=x;
				x=nr[n]/10;
				nr[n]%=10;
				if (n>j-1){
					j++;
				}
			}while (x>0);
		}
	}
	for (j--;j>=0;j--)
		fout<<nr[j];
	fout.close();
}