Pagini recente » Profil andrea_b | Istoria paginii utilizator/damien | Monitorul de evaluare | Istoria paginii utilizator/maria111 | Cod sursa (job #2021569)
#include <cstdio>
#include <algorithm>
FILE *fin, *fout;
int r, d;
inline int get(int f, int n) {
int ans = 0;
while (n > 0 && n % f == 0)
ans++, n /= f;
return ans;
}
int main() {
fin = fopen("pascal.in", "r");
fout = fopen("pascal.out", "w");
fscanf(fin, "%d%d", &r, &d);
int ans = 0, pow2 = 0, pow3 = 0, pow5 = 0;
for (int j = 0; j < r; j++) {
if (d == 2) {
pow2 += get(2, r - j) - get(2, j + 1);
if (pow2 > 0)
ans++;
else pow2 = 0;
}
if (d == 3) {
pow3 += get(3, r - j) - get(3, j + 1);
if (pow3 > 0)
ans++;
else
pow3 = 0;
}
if (d == 4) {
pow2 += get(2, r - j) - get(2, j + 1);
if (pow2 > 1)
ans++;
else
pow2 = std::max(pow2, 0);
}
if (d == 5) {
pow5 += get(5, r - j) - get(5, j + 1);
if (pow5 > 0)
ans++;
else
pow5 = 0;
}
if (d == 6) {
pow2 += get(2, r - j) - get(2, j + 1);
pow3 += get(3, r - j) - get(3, j + 1);
if (pow2 > 0 && pow3 > 0)
ans++;
else pow2 = std::max(pow2, 0), pow3 = std::max(pow3, 0);
}
}
fprintf(fout, "%d", ans);
fclose(fin);
fclose(fout);
return 0;
}