Cod sursa(job #308374)

Utilizator pcinfoCarmen Popescu pcinfo Data 26 aprilie 2009 22:13:59
Problema Factoriale Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

ifstream f("factoriale.in");
ofstream g("factoriale.out");

void inmult(int nr[200],int x)
{
	int t=0,i,lung;
	lung=nr[0];
	for (i=1;i<=lung;i++)
	{
		nr[i]=nr[i]*x+t;;
		t=nr[i]/10;
		nr[i]=nr[i]%10;
	}
	while (t>10)
	{
		lung++;
		nr[lung]=t%10;
		t=t/10;
	}
	nr[0]=lung;
}

int main()
{
	int p[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};
	
	vector<int> v(25,0);
	vector< vector<int> > a(101,vector<int>(25,0)); 
	int i,j,k,n,x;
	int nr[200];
	
	a[2][0]=1;
	a[3][0]=1; a[3][1]=1;
	
	for (i=4;i<=100;i++)
	{
		a[i]=a[i-1];
		k=i;
		for (j=0;j<25 && k>1;j++)
			while (k%p[j]==0)
			{
				a[i][j]++;
				k=k/p[j];
			}
	}
	
	f>>n>>k;
	for (i=1;i<=n;i++)
	{
		f>>x;
		for (j=0;j<25;j++)
			v[j]+=a[x][j];
	}
	
	nr[1]=1; nr[0]=1;
	for (i=0;i<25;i++)
		if (v[i]%k!=0)
		{
			j=k-v[i]%k;
			while (j>0)
			{
				inmult(nr,p[i]);
				j--;
			}
		}
	
	for(i=nr[0];i>=1;i--)
		g<<nr[i];
	
	g.close();
	return 0;
}