Pagini recente » Cod sursa (job #1056546) | Cod sursa (job #1563514)
#include <fstream>
#include <iostream>
#include <vector>
#include <array>
using namespace std;
template <int p>
int cate_ori_apare_prim_fact(int x){
static array<int, 5000010> buf = {};
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; } }
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; }