Cod sursa(job #444485)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 20 aprilie 2010 16:25:47
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#define Max(a,b) a > b ? a : b
#define Min(a,b) a < b  ? a : b
#define Inf 1<<30

int f[10],i,j,d,D,R,C,Des,Sc,S,m,sol; 


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;
			}
		}
	}
	Des=Inf;
	
	for(d=2;d<6;d++)
		if(f[d])
		{
			for(i=d;i<=R;i*=d)
				S+=R/i;
			S/=f[d];
			Des=Min(Des,S);
		}
	
	m=(R-1)>>1;

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