Посчитать «честно чётные» числа от 1 до n
Натуральное число «честно чётное», если каждая цифра его десятичной записи чётна (4826 и 8802 подходят; 79, 301 и 1478 — нет). Верните, сколько честно чётных чисел от 1 до n включительно.
Примеры: n=1 → 0; n=2 → 1; n=10 → 4 (числа 2, 4, 6, 8).
def count_honestly_even(n: int) -> int:
# ваш код здесь
Напишите реализацию.
Считают числа, у которых каждая цифра в {0,2,4,6,8}. Прямой проход: sum(1 for k in range(1, n+1) if all(d in '02468' for d in str(k))). Ловушка — прочитать «чётное число» как value % 2 == 0 — здесь проверка по цифрам, а не по чётности числа.
- ✗Считать обычные чётные (value % 2) вместо всех-цифр-чётных
- ✗Проверять только последнюю цифру
- ✗Использовать чётность суммы цифр вместо чётности каждой цифры
- →Почему 10 не проходит тест на честную чётность?
- →Как digit-DP подход масштабирует это для огромных n?
The condition is per-digit, not whole-number parity: every decimal digit must be in {0,2,4,6,8}.
def count_honestly_even(n: int) -> int:
return sum(1 for k in range(1, n + 1)
if all(d in '02468' for d in str(k)))
For n=10 only 2, 4, 6, 8 pass — 10 has the odd digit 1 — so the count is 4. n=1 gives 0 (1 is odd) and n=2 gives 1. The leading digit can never be 0, so no spurious numbers are counted. The brute scan is O(n · digits); for very large n a digit-DP counts without enumerating every value.