Pagini recente » Cod sursa (job #495412) | Cod sursa (job #1877305) | Cod sursa (job #2236182) | Cod sursa (job #2769769) | Cod sursa (job #1805965)
#include <cstdio>
const int MAX_N = 5000000;
const int E2 = 0;
const int E3 = 1;
const int E5 = 2;
struct exp {
int v[3];
} prim[MAX_N], prec[MAX_N], fi, fj, fij, rez;
int main() {
int r, d, nr;
FILE *fin = fopen("pascal.in", "r");
fscanf(fin, "%d%d", &r, &d);
fclose(fin);
for(int i = 1; i <= r; ++i) {
if(i % 2 == 0)
prec[i].v[0] = prec[i / 2].v[0] + 1;
if(i % 3 == 0)
prec[i].v[1] = prec[i / 3].v[1] + 1;
if(i % 5 == 0)
prec[i].v[2] = prec[i / 5].v[2] + 1;
}
for(int i = 1; i <= r; ++i) {
prec[i].v[0] += prec[i - 1].v[0];
prec[i].v[1] += prec[i - 1].v[1];
prec[i].v[2] += prec[i - 1].v[2];
}
bool ok, rep;
fi = prec[r];
nr = 0;
rep = false;
for(int j = 0; j <= r / 2; ++j) {
fj = prec[j];
fij = prec[r - j];
rez.v[E2] = fi.v[E2] - fj.v[E2] - fij.v[E2];
rez.v[E3] = fi.v[E3] - fj.v[E3] - fij.v[E3];
rez.v[E5] = fi.v[E5] - fj.v[E5] - fij.v[E5];
switch(d) {
case 2: {
ok = rez.v[E2] > 0;
break;
}
case 3: {
ok = rez.v[E3] > 0;
break;
}
case 4: {
ok = rez.v[E2] > 1;
break;
}
case 5: {
ok = rez.v[E5] > 0;
break;
}
case 6: {
ok = rez.v[E2] > 0 && rez.v[E3] > 0;
break;
}
}
if(ok) {
nr++;
if(j == r - j)
rep = true;
}
}
FILE *fout = fopen("pascal.out", "w");
fprintf(fout, "%d", 2 * nr - rep);
fclose(fout);
return 0;
}