Cod sursa(job #1197772)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 13 iunie 2014 18:43:19
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 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;

bool verifnr(int i)
{
	if(vf2==1)
	{
		vp2=vp(i, 2);
		vp22=vp(n-i, 2);
		if(vpn2==vp2+vp22)
			return 0;
	}
	if(vf3==1)
	{
		vp3=vp(i, 3);
		vp32=vp(n-i, 3);
		if(vpn3==vp3+vp32)
			return 0;
	}
	if(vf5==1)
	{
		vp5=vp(i, 5);
		vp52=vp(n-i, 5);
		if(vpn5==vp5+vp52)
			return 0;
	}
	return 1;
}

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(verifnr(i))
			nr++;
	}
	nr*=2;
	if(n%2==0 && verifnr(n/2))
		nr++;
	printf("%d", nr);
    return 0;
}