Cod sursa(job #1059101)

Utilizator tudorv96Tudor Varan tudorv96 Data 16 decembrie 2013 09:43:42
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
using namespace std;

ifstream fin ("pascal.in");
ofstream fout ("pascal.out");

int n, d;

int Count (int x, int d) {
	int sol = 0;
	while (x % d == 0) {
		sol++;
		x /= d;
	}
	return sol;
}

int Get_for_prime(int d) {
	int sol = 0, k = 0;
	for (int i = 1; i <= n / 2; ++i) {
		sol += Count (n + 1 - i, d) - Count(i, d);
		if (sol) k += 2;
	}
	if (sol && !(n & 1))
		k--;
	return k;
}

int Get_for_4() {
	int sol = 0, k = 0;
	for (int i = 1; i <= n / 2; ++i) {
		sol += Count (n + 1 - i, 2) - Count(i, 2);
		if (sol > 1) k += 2;
	}
	if (sol > 1 && !(n & 1))
		k--;
	return k;
}

int Get_for_6() {
	int sol1 = 0, sol2 = 0, k = 0;
	for (int i = 1; i <= n / 2; ++i) {
		sol1 += Count (n + 1 - i, 2) - Count(i, 2);
		sol2 += Count (n + 1 - i, 3) - Count(i, 3);
		if (sol1 && sol2)
			k += 2;
	}
	if (sol1 && sol2 && !(n & 1))
		k--;
	return k;
}

int Get_for (int k) {
	if (k == 2 || k == 3 || k == 5)
		return Get_for_prime (k);
	if (k == 4)
		return Get_for_4();
	return Get_for_6();
}

int main() {
	fin >> n >> d;
	fout << Get_for(d);
}