Cod sursa(job #1197773)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 13 iunie 2014 18:50:16
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 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)//vp(n!)=vpn=?
{
	int i, updatedp, vpn=0;
	updatedp=p;
	while(updatedp<=n)
	{
		vpn+=n/updatedp;
		updatedp*=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+1)/2;
    if(d%2==0)
	{
		vf2=1;
		vpn2=vp(n, 2);
	}
    if(d%3==0)
	{
		vf3=1;
		vpn3=vp(n, 3);
	}
    if(d%5==0)
	{
		vf5=1;
		vpn5=vp(n, 5);
	}
    for(int i=0;i<lim;i++)
	{
		if(vf2==1)
		{
			vp2=vp(i, 2);
			vp22=vp(n-i, 2);
			if(vpn2==vp2+vp22)
				continue;
		}
		if(vf3==1)
		{
			vp3=vp(i, 3);
			vp32=vp(n-i, 3);
			if(vpn3==vp3+vp32)
				continue;
		}
		if(vf5==1)
		{
			vp5=vp(i, 5);
			vp52=vp(n-i, 5);
			if(vpn5==vp5+vp52)
				continue;
		}
		nr++;
	}
	nr*=2;
	int i=n/2;
	if(n%2==0)
	{
		bool ok=1;
		if(vf2==1)
		{
			vp2=vp(i, 2);
			vp22=vp(n-i, 2);
			if(vpn2==vp2+vp22)
				ok=0;
		}
		if(vf3==1)
		{
			vp3=vp(i, 3);
			vp32=vp(n-i, 3);
			if(vpn3==vp3+vp32)
				ok=0;
		}
		if(vf5==1)
		{
			vp5=vp(i, 5);
			vp52=vp(n-i, 5);
			if(vpn5==vp5+vp52)
				ok=0;
		}
		nr++;
	}
	printf("%d", nr);
    return 0;
}