Pagini recente » Cod sursa (job #120431) | Cod sursa (job #2955745) | Cod sursa (job #3158664) | Cod sursa (job #815967) | Cod sursa (job #1563516)
#include <fstream>
#include <iostream>
using namespace std;
constexpr int sz = 5000010;
int nr_2[sz], nr_3[sz], nr_5[sz];
void init_all(){
for(int p = 2; p < sz; p *= 2){
for(int i = p; i < sz; i += p){
++nr_2[i]; } }
for(int p = 3; p < sz; p *= 3){
for(int i = p; i < sz; i += p){
++nr_3[i]; } }
for(int p = 5; p < sz; p *= 5){
for(int i = p; i < sz; i += p){
++nr_5[i]; } }
for(int i = 1; i < sz; ++i){
nr_2[i] += nr_2[i-1];
nr_3[i] += nr_3[i-1];
nr_5[i] += nr_5[i-1]; } }
bool e_div(const int r, const int c, const int d){
if(d == 2){
int n = nr_2[r];
n -= nr_2[r-c];
n -= nr_2[c];
return n > 0; }
if(d == 3){
int n = nr_3[r];
n -= nr_3[r-c];
n -= nr_3[c];
return n > 0; }
else if(d == 4){
int n = nr_2[r];
n -= nr_2[r-c];
n -= nr_2[c];
return n > 1; }
if(d == 5){
int n = nr_5[r];
n -= nr_5[r-c];
n -= nr_5[c];
return n > 0; }
else if(d == 6){
int n2 = nr_2[r];
n2 -= nr_2[r-c];
n2 -= nr_2[c];
int n3 = nr_3[r];
n3 -= nr_3[r-c];
n3 -= nr_3[c];
return n2 > 0 && n3 > 0; }
return 0xbeafface; }
int main(){
init_all();
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; }