Cod sursa(job #137738)

Utilizator ioraIoana Radu iora Data 17 februarie 2008 14:14:47
Problema Factoriale Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<stdio.h>
int p[30]={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 ok,h,cif,t,n,k,i,x,j,c,put,m[1001],y[1001];
long f[30],sp[30];
int main()
{
	freopen("factoriale.in","r",stdin);
	freopen("factoriale.out","w",stdout);

	scanf("%d %d",&n,&k);
	ok=0;
	for(i=1;i<=n;++i)
		{
			if(x>1) ok=1;
			for(j=0;j<25;++j)
				{
					c=x;
					put=p[j];
					while(c/put)
					{
						f[j]+=c/put;
						put=put*p[j];
					}
				}
		}

	for(j=0;j<25;++j)
		if(f[j])
		 if(f[j]%k)	sp[j]=k-(f[j]%k);

	m[1]=1;
	for(j=0;j<25;++j)
		{
			if(sp[j])
				{
					if(p[j]<10)
						{
							for(i=1;i<=sp[j];++i)
								{
								t=0;
								for(h=1;h<=1000;++h)
										if(p[j]*m[h]+t<10) { m[h]=m[h]*p[j]+t; t=0;}
										else { c=m[h];m[h]=(m[h]*p[j]+t)%10; t=(c*p[j]+t)/10;}
								}
						}
					else
					{
						for(i=1;i<=sp[j];++i)
						{
							cif=p[j]%10;
							for(h=1;h<=1000;++h)
								m[h]=m[h]*cif;
							cif=p[j]/10;

							for(h=1;h<=1000;++h)
								y[h]=m[h];
							for(h=2;h<=1000;++h)
								m[h]+=y[h-1]*cif;
							t=0;
							for(h=1;h<=1000;++h)
								{ c=m[h];m[h]=(m[h]+t)%10; t=(c+t)/10;}
						}
					}
				}
		}

	for(i=1000;i>=1;--i)
		if(m[i]!=0) {c=i; break;}
	for(i=c;i>=1;--i)
		printf("%d",m[i]);
	return 0;
}