Cod sursa(job #1197780)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 13 iunie 2014 19:14:44
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>

using namespace std;

bool vf2=0, vf3=0, vf5=0;
int vp2, vp22, vp3, vp32, vp5, vp52, vpn2, vpn3, vpn5;

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

int main()
{
    freopen("pascal.in", "r", stdin);
    freopen("pascal.out", "w", stdout);
    int d, lim, nr=0;
    scanf("%d%d", &n, &d);
    lim=n/2;
    if(d==2 || d==3 || d==5)
	{
		int vnew, vold, vtotal=0;
		for(int i=1;i<=lim;i++)
		{
			vnew=vp(i, d);
			vold=vp(n-i+1, d);
			vtotal+=(vold-vnew);
			if(vtotal>0)nr++;
		}
		nr*=2;
		if(n%2==0 && vtotal>0)nr--;
		printf("%d", nr);
	}
	else if(d==6)
	{
		int vnew2, vold2, vnew3, vold3, vtotal2=0, vtotal3=0;
		for(int i=1;i<=lim;i++)
		{
			vnew2=vp(i, 2);
			vold2=vp(n-i+1, 2);
			vtotal2+=(vold2-vnew2);
			vnew3=vp(i, 3);
			vold3=vp(n-i+1, 3);
			vtotal3+=(vold3-vnew3);
			if(vtotal2>0 && vtotal3>0)nr++;
		}
		nr*=2;
		if(n%2==0 && vtotal2>0 && vtotal3>0)nr--;
		printf("%d", nr);
	}
	else if(d==4)
	{
		int vnew, vold, vtotal=0;
		for(int i=1;i<=lim;i++)
		{
			vnew=vp(i, d);
			vold=vp(n-i+1, d);
			vtotal+=(vold-vnew);
			if(vtotal>1)nr++;
		}
		nr*=2;
		if(n%2==0 && vtotal>0)nr--;
		printf("%d", nr);
	}
    return 0;
}