Cod sursa(job #1563515)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 6 ianuarie 2016 05:38:44
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

template <int p>
int cate_ori_apare_prim_fact(int x){
	static int buf[5000010] = {};
	if(x < p){
		return 0; }
	if(buf[x] == 0){
		buf[x] = x/p + cate_ori_apare_prim_fact<p>(x/p); }
	return buf[x]; }

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

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

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

	int rez = 0;
	int i = 0, j = r;
	for( ; i < j; ++i, --j){
		rez += 2*e_div(r, i, d); }
	if(i == j){
		rez += e_div(r, i, d); }

	g << rez;
	return 0; }