Cod sursa(job #326320)

Utilizator rumburakrumburak rumburak Data 24 iunie 2009 16:34:30
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>

const int oo=1<<30;

int r,d,a[2],nr,n[2],k[2],n_k[2];

void desc()
{
	if(d==2 || d==4)
	{
		a[0]=2;
		nr=1;
		return;
	}
	if(d==3)
	{
		a[0]=3;
		nr=1;
		return;
	}
	if(d==5)
	{
		a[0]=5;
		nr=1;
		return;
	}
	a[0]=2;
	a[1]=3;
	nr=2;
}

int putere(int n,int k)
{
	int s=0,p=k;
	while(p<=n)
	{
		s+=n/p;
		p*=k;
	}
	return s;
}

int putere2(int n,int k)
{
	int p=0;
	while(n%k==0)
	{
		++p;
		n/=k;
	}
	return p;
}

int calcul()
{
	int i,j,p1,p2,min,rez=0;
	for(i=0;i<nr;++i)
	{
		n_k[i]=n[i]=putere(r,a[i]);
		k[i]=0;
	}
	for(j=1;j<r;++j)
	{
		min=oo;
		for(i=0;i<nr;++i)
		{
			p1=putere2(j,a[i]);
			p2=putere2(r-j+1,a[i]);
			k[i]+=p1;
			n_k[i]-=p2;
			if(n[i]-k[i]-n_k[i]<min)
				min=n[i]-k[i]-n_k[i];
		}
		if(d==4 && min>=2)
			++rez;
		if(d!=4 && min)
			++rez;
	}
	return rez;
}

int main()
{
	freopen("pascal.in","r",stdin);
	freopen("pascal.out","w",stdout);
	scanf("%d%d",&r,&d);
	desc();
	printf("%d\n",calcul());
	return 0;
}