Pagini recente » Cod sursa (job #81728) | Cod sursa (job #876853) | Imbunatatire teste | Cod sursa (job #209435) | Cod sursa (job #1805946)
#include <cstdio>
const int MAX_N = 5000000;
const int E2 = 0;
const int E3 = 1;
const int E5 = 2;
struct codeFactory {
int pr[3];
} prec[1+MAX_N], fi, fj, fij, rez;
void upd(int r, int pr, int poz) {
int p;
p = pr;
while(p <= r) {
for(int i = p; i <= r; i = i + p)
prec[i].pr[poz]++;
p = p * pr;
}
}
int main() {
int r, d, nr;
FILE *fin = fopen("pascal.in", "r");
fscanf(fin, "%d%d", &r, &d);
fclose(fin);
if(d % 2 == 0)
upd(r, 2, E2);
if(d % 3 == 0)
upd(r, 3, E3);
if(d % 5 == 0)
upd(r, 5, E5);
for(int i = 1; i <= r; ++i) {
prec[i].pr[E2] += prec[i - 1].pr[E2];
prec[i].pr[E3] += prec[i - 1].pr[E3];
prec[i].pr[E5] += prec[i - 1].pr[E5];
}
bool ok;
fi = prec[r];
nr = 0;
for(int j = 0; j <= r; ++j) {
fj = prec[j];
fij = prec[r - j];
rez.pr[E2] = fi.pr[E2] - fj.pr[E2] - fij.pr[E2];
rez.pr[E3] = fi.pr[E3] - fj.pr[E3] - fij.pr[E3];
rez.pr[E5] = fi.pr[E5] - fj.pr[E5] - fij.pr[E5];
switch(d) {
case 2: {
ok = rez.pr[E2] > 0;
break;
}
case 3: {
ok = rez.pr[E3] > 0;
break;
}
case 4: {
ok = rez.pr[E2] > 1;
break;
}
case 5: {
ok = rez.pr[E5] > 0;
break;
}
case 6: {
ok = rez.pr[E2] > 0 && rez.pr[E3] > 0;
break;
}
}
if(ok)
nr++;
}
FILE *fout = fopen("pascal.out", "w");
fprintf(fout, "%d", nr);
fclose(fout);
return 0;
}