Cod sursa(job #58701)

Utilizator andrei.12Andrei Parvu andrei.12 Data 6 mai 2007 22:06:40
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>
int a, nr, d, r, i, p, p1, p2, P, P2, P1, x, y;
int main()
{
	freopen("pascal.in","r",stdin);
	freopen("pascal.out","w",stdout);
	scanf("%d%d",&r,&d);
	if (d==2||d==3||d==5){
		a=d;
		p=0;
		while (a<=r){
			p+=(r/a);
			a*=d;
		}
		p1=p;
		p2=0;
		for (i=1;i<=r/2;i++){
			x=0;
			y=r-i+1;
			while (y%d==0){
				x++;
				y/=d;
			}
			p1-=x;
			x=0;
			y=i;
			while (y%d==0){
				x++;
				y/=d;
			}
			p2+=x;
			if (p-p1-p2>0) nr++;
		}
		if (r%2==1) printf("%d\n",2*nr);
		else printf("%d\n",2*nr-1);
		return 0;
	}
	if (d==4){
		a=2;
		p=0;
		while (a<=r){
			p+=(r/a);
			a*=2;
		}
		p1=p;
		p2=0;
		for (i=1;i<=r/2;i++){
			x=0;
			y=r-i+1;
			while (y%2==0){
				x++;
				y/=2;
			}
			p1-=x;
			x=0;
			y=i;
			while (y%2==0){
				x++;
				y/=2;
			}
			p2+=x;
			if (p-p1-p2>1) nr++;
		}
		if (r%2==1) printf("%d\n",2*nr);
		else printf("%d\n",2*nr-1);
		return 0;
	}
	if (d==6){
		a=2;
		p=0;
		while (a<=r){
			p+=(r/a);
			a*=2;
		}
		p1=p;
		p2=0;
		a=3;
		P=0;
		while (a<=r){
			P+=(r/a);
			a*=3;
		}
		P1=P;
		P2=0;
		for (i=1;i<=r/2;i++){
			x=0;
			y=r-i+1;
			while (y%2==0){
				x++;
				y/=2;
			}
			p1-=x;
			x=0;
			y=i;
			while (y%2==0){
				x++;
				y/=2;
			}
			p2+=x;
			x=0;
			y=r-i+1;
			while (y%3==0){
				x++;
				y/=3;
			}
			P1-=x;
			x=0;
			y=i;
			while (y%3==0){
				x++;
				y/=3;
			}
			P2+=x;
			if ((p-p1-p2>0)&&(P-P1-P2>0)) nr++;
		}
		if (r%2==1) printf("%d\n",2*nr);
		else printf("%d\n",2*nr-1);
		return 0;
	}
}