Cod sursa(job #471366)

Utilizator blasterzMircea Dima blasterz Data 18 iulie 2010 14:02:33
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>

int n, D;
int p[128];
int x, k, ret;


void doit ()
{
	x = n - k;
	
	int key[] = {2, 3, 5};
	
	for (int pp = 0; pp < 3; ++pp)
	{
		int i = key[pp];

		while (x % i == 0)
			x /= i,
			++p[i];
	}

	x = k + 1;

	for (int pp = 0; pp < 3; ++pp)
	{
		int i = key[pp];

		while (x % i == 0)
			x /= i,
			--p[i];
	}

	switch (D)
	{
		case 2 : ret += (p[2] >= 1); break;
		case 3 : ret += (p[3] >= 1); break;
		case 4 : ret += (p[2] >= 2); break;
		case 5 : ret += (p[5] >= 1); break;
		case 6 : ret += (p[2] >= 1 && p[3] >= 1); break;
	}


}
int main ()
{
	freopen ("pascal.in", "r", stdin);
	freopen ("pascal.out", "w",stdout);

	scanf ("%d%d", &n, &D);

	for (k = 0; k < ((n + 1) / 2) - 1; ++k)
		doit ();

	ret *= 2;

	if (n % 2 == 0)
		doit ();

	printf ("%d\n", ret);

	return 0;
}