Cod sursa(job #303147)

Utilizator ooctavTuchila Octavian ooctav Data 9 aprilie 2009 16:35:26
Problema Factoriale Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
// factoriale.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
int e[101][101];
int element[101];
int numere[101];
bool ciu[101];
int m[101];
int n,k,maxim=0,a,t,l;
char c[1000005];
void ciur()
{
	for(int i=2;i*i<=100;i++)
		if(!ciu[i])
		for(int j=i*i;j<=100;j=j+i)
			ciu[j]=true;

}
int main()
{
	freopen("factoriale.in","r",stdin);
	freopen("factoriale.out","w",stdout);
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a);
		numere[a]=true;
		if(a>maxim)
			maxim=a;
	}
	ciur();
	for(int i=2;i<=maxim;i++)
	{
		int copiei=i;
		for(int j=2;j<=maxim;j++)
		{
			if(!ciu[j] && copiei%j==0)
				while(copiei%j==0)
				{
					element[j]++;
					copiei=copiei/j;
				}
			if(copiei==1)
				break;
		}
		if(numere[i])
			for(int j=1;j<=maxim;j++)
				m[j]=m[j]+element[j];
	}
	c[0]=1;c[1]=1;
	for(int i=1;i<=maxim; i++)
		if(m[i]%k)
			for(int j=1;j<=k-m[i]%k;j++)
			{
				l=1;
				while(l<=c[0] || t)
				{
					c[l]=(t=t+c[l]*i)%10;
					t=t/10;
					l++;
				}
				while(c[c[0]+1])
					c[0]++;
			}
	for(int i=c[0];i>=1;i--)
		printf("%d",c[i]);
	printf("\n");

	return 0;
}