Cod sursa(job #1563511)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 6 ianuarie 2016 05:27:11
Problema Pascal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>
using namespace std;

int cate_ori_apare_prim_fact(int x, const int p, const int tmp = 0){
	return (x < p) ? tmp : cate_ori_apare_prim_fact(x/p, p, tmp + x/p); }

bool e_div(const int r, const int c, const int d){
	if(d == 2 || d == 3 || d == 5){
		int n = cate_ori_apare_prim_fact(r, d);
		n -= cate_ori_apare_prim_fact(r-c, d);
		n -= cate_ori_apare_prim_fact(c, d);
		return n > 0; }
	else if(d == 2){
		int n = cate_ori_apare_prim_fact(r, 2);
		n -= cate_ori_apare_prim_fact(r-c, 2);
		n -= cate_ori_apare_prim_fact(c, 2);
		return n > 1; }
	else if(d == 6){
		int n2 = cate_ori_apare_prim_fact(r, 2);
		n2 -= cate_ori_apare_prim_fact(r-c, 2);
		n2 -= cate_ori_apare_prim_fact(c, 2);

		int n3 = cate_ori_apare_prim_fact(r, 3);
		n3 -= cate_ori_apare_prim_fact(r-c, 3);
		n3 -= cate_ori_apare_prim_fact(c, 3);
		return n2 > 0 && n3 > 0; } }

int main(){
	ifstream f("pascal.in");
	ofstream g("pascal.out");
	int r, d;
	f >> r >> d;

	int rez = 0;
	for(int i = 0; i <= r; ++i){
		rez += e_div(r, i, d); }

	g << rez;
	return 0; }