Cod sursa(job #505163)

Utilizator matei_cChristescu Matei matei_c Data 30 noiembrie 2010 22:44:58
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
int putere(long long x,int d)
{
	int p=0;
	if(d>x)
		return 0;
	while(x)
	{
		p+=x/d;
		x/=d;
	}	
	return p;
}

bool diviz=false,par=false;
int D,vd[6],vr[6],vi[6],vri[6],nr;
long long R;
int main()
{
	int i,lim,j;
	freopen("pascal.in","r",stdin);
	freopen("pascal.out","w",stdout);
	scanf("%lld%d",&R,&D);
	//printf("%d",p);]
	if(D%2==0) vd[2]=1;
	if(D==4) vd[2]=2;
	if(D%3==0) vd[3]=1;
	if(D==5) vd[5]=1;
	vr[2]=putere(R,2);
	vr[3]=putere(R,3);
	vr[5]=putere(R,5);
	par=false;
	if(R%2==1)
		lim=R/2;
	else
	{
		par=true;
		lim=R/2;
		//nr--;
	}
	for(i=1;i<=lim;i++)
	{
		vri[2]=putere(R-i,2);vri[3]=putere(R-i,3);vri[5]=putere(R-i,5);
		vi[2]=putere(i,2);vi[3]=putere(i,3);vi[5]=putere(i,5);
		for(j=2;j<=5;j++)
		{
			if(j==4)
				j++;
			if(vd[j]>0)
				if(vr[j]-vi[j]-vri[j]-vd[j]>=0)
					diviz=true;
				else
				{	
					diviz=false;
					break;
				}
		}	
		if(diviz==true)
		{	
			if(i==lim && par==true)
				nr--;
			nr+=2;
			diviz=false;
		}	
		vi[2]=0;vi[3]=0;vi[5]=0;
		vri[2]=0;vri[3]=0;vri[5]=0;	
	}	
	//if(par==true)
	//	nr--;
	printf("%d\n",nr);
	return 0;
}