Cod sursa(job #140980)

Utilizator scvalexAlexandru Scvortov scvalex Data 22 februarie 2008 16:29:45
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>

using namespace std;

int R,
	D, DD;

long pN, pK, pNK;

int main(int argc, char *argv[]) {
	ifstream fin("pascal.in");
	fin >> R >> D;
	fin.close();

	//cout << R << " " << D << endl;

	DD = D;
	if (4 == D)
		DD = 2;
	if (6 == D)
		DD = 3;

	for (long i = DD; i <= R; i *= DD) 
		pN += R / i;

	if (4 == D)
		pN /= 2;

	/*for (int i(1); i <= P; ++i)
		cout << divs[i] << " ";
	cout << endl;*/

	pNK = pN;
	pK = 0;
	int aux, i;
	long res(0);
	for (int k(1); k <= R / 2; ++k) {
		// pK
		aux = k;
		i = 0;
		while (aux % D == 0) {
			aux /= D;
			++i;
		}
		pK += i;

		aux = R - k + 1;
		i = 0;
		while (aux % D == 0) {
			aux /= D;
			++i;
		}
		pNK -= i;
		//cout << k << " " << pK << " " << pNK << endl;
		if (pN - pK - pNK)
			if ((R % 2 == 0) && (k == R / 2))
				++res;
			else
				res += 2;
	}

	ofstream fout("pascal.out");
	fout << res << endl;
	fout.close();

	return 0;
}