Cod sursa(job #138463)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 18 februarie 2008 17:55:48
Problema Factoriale Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream.h>
#include<math.h>
#define nrc 10000
	ifstream f("factoriale.in");
	ofstream g("factoriale.out");
int factori[100],n,k,o,i;
int sol2[nrc];
void sol(int t)
{
for(int i=nrc-1;i>=1;i--)
{        sol2[i]=(sol2[i]*t)%10;sol2[i-1]+=(sol2[i]*t)/10;}
	}
void creste(int o)
{
	for(int aux=2;aux<=o;aux++)
    {

     int l=aux,d=2;
     while(l!=1)
	{ while(l%d==0)
		{if (factori[d]+1!=k) factori[d]=k-(++factori[d]%k);
			else factori[d]=0;
			l/=d;}
		d++;}}}
int main()
{
sol2[nrc-1]=1;
f>>n>>k;
for(i=1;i<=n;f>>o,creste(o),i++);
for(int y=2;y<=99;y++)
	{
	for(int j=1;j<=factori[y];j++)
		{if (y/10!=0)
		{
		for(int i=nrc-1;i>=1;i--){int aux=sol2[i-1];sol2[i-1]=sol2[i];sol2[i]=aux;}sol2[nrc-1]=0;sol(y/10);
		for(i=nrc-1;i>=1;i--)
{        sol2[i]=(sol2[i]+(sol2[i]*(y%10))%10)%10;sol2[i-1]+=(sol2[i]+(sol2[i]*(y%10))%10)/10;}
	}else sol(y%10);}}
	int flag=0;
	for(int i=1;i<=nrc;i++)
	{if(sol2[i]!=0) flag=1;
	if (flag) g<<sol2[i];}
f.close();
g.close();
return 0;
	}