Cod sursa(job #444498)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 20 aprilie 2010 16:40:10
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
#define Max(a,b) a > b ? a : b
#define Min(a,b) a < b  ? a : b
#define Inf 1<<30
#define Rmax 5000010
int f[10],i,j,d,D,R,S,m,sol,v[Rmax]; 


int main()
{
	freopen("pascal.in","r",stdin);
	freopen("pascal.out","w",stdout);
	
	scanf("%d %d",&R,&D);
	
	for(d=2;d<=D;d++)
	{
		if(D%d==0)
		{
			while(D%d==0)
			{
				f[d]++;
				D/=d;
			}
		}
	}
	
	for(i=1;i<=R;i++) v[i]=Inf;
	
	for(d=2;d<6;d++)
		if(f[d])
		{
			for(i=d;i<=R;i*=d)
				S+=R/i;
			S/=f[d];
			v[R]=Min(v[R],S);
		}
	
	m=R>>1;

		
	for(d=2;d<6;d++)
		if(f[d])
		{
			for(i=1;i<=R;i++)
			{
				S=0;
				for(j=d;j<=i;j*=d)
					S+=i/j;
				S/=f[d];
				v[i]=Min(v[i],S);
			}
		}
	if(R&1)
	{
		for(i=1;i<=m;i++)
			if(v[R]-v[i]-v[R-i]>0) sol++;
		sol<<=1;
	}
	else 
	{
		for(i=1;i<m;i++);
			if(v[R]-v[i]-v[R-i]>0) sol++;
		sol<<=1;
		if(v[R]-2*v[m]>0) sol++;
	}
	
	printf("%d",sol);
	return 0;
}