Cod sursa(job #1006504)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 7 octombrie 2013 10:25:07
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
using namespace std;
int n,K,sol[100010];
int prime[55],nrp,Exp[55];
bool ciur[110];

inline 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;
}

int main()
{
	int i,j,p,X;
	prime[++nrp]=2;
	for(i=3;i<100;i+=2)
	{
		if(!ciur[i])
		{
			prime[++nrp]=i;
			for(j=i*i;j<100;j+=2*i)
				ciur[j]=true;
		}
	}
	ifstream fin("factoriale.in");
	fin>>n>>K;
	while(n--)
	{
		fin>>X;
		for(i=1;i<=nrp;i++)
		{
			p=prime[i];
			while(X>=p)
			{
				Exp[i]+=X/p;
				p*=prime[i];
			}
		}
	}
	fin.close();
	
	sol[0]=sol[1]=1;
	for(i=1;i<=nrp;i++)
	{
		Exp[i]%=K;
		if(Exp[i])
		{
			Exp[i]=K-Exp[i];
			for(j=1;j<=Exp[i];j++)
				Inmulteste(sol,prime[i]);
		}
	}
	
	ofstream fout("factoriale.out");
	for(i=sol[0];i>0;i--)
		fout<<sol[i];
	fout<<"\n";
	fout.close();
	return 0;
}