Cod sursa(job #548138)

Utilizator toniobFMI - Barbalau Antonio toniob Data 7 martie 2011 09:27:57
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
using namespace std;

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

int n, d, rez;

int fact (int n, int i) {
	int rez = 0;
	while (n) {
		rez += (n /= i);
	}
	return -rez;
}

void fprim () {
	int i, k = 0;
	for (i = 1; i < (n + 1) >> 1; ++i) {
		k += fact (i, d) - fact (n - i + 1, d);
		rez += (k > 0);
	}
	rez <<= 1;
	if (n % 2 == 0) {
		k += fact (i, d) - fact (n - i + 1, d);
		rez += (k > 0);
	}
}

void f4 () {
	int i, k = 0;
	for (i = 1; i < (n + 1) >> 1; ++i) {
		k += fact (i, 2) - fact (n - i + 1, 2);
		rez += (k > 1);
	}
	rez <<= 1;
	if (n % 2 == 0) {
		k += fact (i, 2) - fact (n - i + 1, 2);
		rez += (k > 1);
	}
}

void f6 () {
	int i, k = 0, k1 = 0;
	for (i = 1; i < (n + 1) >> 1; ++i) {
		k += fact (i, 2) - fact (n - i + 1, 2);
		k1 += fact (i, 3) - fact (n - i + 1, 3);
		rez += (k > 0) && (k1 > 0);
	}
	rez <<= 1;
	if (n % 2 == 0) {
		k += fact (i, 2) - fact (n - i + 1, 2);
		k1 += fact (i, 3) - fact (n - i + 1, 3);
		rez += (k > 0) && (k1 > 0);
	}
}

void citire () {
	in >> n >> d;
}

void exe () {
	if (d == 2 || d == 3 || d == 5) {
		fprim ();
	}
	if (d == 4) {
		f4 ();
	}
	if (d == 6) {
		f6 ();
	}
}

void afisare () {
	out << rez << '\n';
}

int main () {
	citire ();
	
	exe ();
	
	afisare ();
	
	return 0;
}