Что входит в задачи на числа
Задачи на числа делятся на 2 большие группы: работа с цифрами записи (количество, наибольшая, переворот, палиндром) и делимость (делители, простые, НОД и НОК, совершенные числа). Обе группы решаются циклом и операторами // и %.
Такие упражнения хороши тем, что не требуют ничего, кроме переменных, условий и циклов. Списки и строки здесь почти не нужны, зато приходится внимательно следить за каждой переменной: что в ней лежит до шага, что после, когда цикл остановится. Именно поэтому задачи на делимость и цифры дают в школе сразу после темы циклов — они проверяют, понял ли ученик, как цикл меняет значения. А ещё в них легко придумать тесты: ответ для небольшого числа можно посчитать в уме.
Набор начинается с цифр. Первые две задачи — количество цифр и переворот числа — используют один и тот же цикл while, меняется только действие внутри. Затем идут делители: перебор всех делителей и поиск простых чисел до N. Пятая задача — наибольший общий делитель и наименьшее общее кратное. Последние три задачи на числа комбинируют приёмы: наибольшая цифра, совершенное число и палиндром без перевода в строку.
По федеральной образовательной программе основного общего образования переменные целого типа, циклы с условием и с переменной изучают в 8 классе[1]. Поэтому весь набор доступен восьмикласснику, который пишет на Python.
Задачи на числа пригодятся и на экзамене. По материалам ФИПИ задание 16 ОГЭ по информатике — программа на универсальном языке, и Python входит в список разрешённых[2]; разбор числа на цифры и проверка делимости — привычные детали таких программ. Не стоит заучивать решения наизусть: важнее понимать, почему цикл останавливается и что лежит в каждой переменной. Руководство PEP 8 советует давать переменным понятные имена, и здесь это особенно полезно: rev, count и best сразу подсказывают, что хранится внутри.
Два главных инструмента: // и %
Оператор // — это деление нацело с отбрасыванием остатка, а % возвращает сам остаток. Для числа 1234 деление на 10 даёт 123 и 4: число без последней цифры и последнюю цифру.
| Выражение | Результат | Смысл |
1234 % 10 | 4 | последняя цифра |
1234 // 10 | 123 | число без последней цифры |
1234 % 100 | 34 | две последние цифры |
1234 // 1000 | 1 | первая цифра четырёхзначного числа |
12 % 3 == 0 | True | 3 — делитель 12 |
17 % 2 | 1 | число нечётное |
Запомнить таблицу проще, если представить, что деление на 10 «отрезает» цифры справа. На 100 — отрезает две, на 1000 — три. А остаток от деления на делитель равен нулю тогда и только тогда, когда число делится нацело. Поведение этих операторов, в том числе для отрицательных значений, описано в официальной документации Python[3]. В наборе все входные числа натуральные, поэтому особенности отрицательных значений можно пока не учитывать.
Разбор: цифры числа в цикле
Чтобы перебрать цифры числа, повторяют 2 действия, пока число больше нуля: берут последнюю цифру через % 10 и отрезают её через // 10. Цифры приходят справа налево.
x = 1200
rev = 0
while x > 0:
rev = rev * 10 + x % 10
x //= 10
print(rev)
21
Переворот работает так: на каждом шаге rev умножается на 10 (все его цифры сдвигаются на разряд влево), а освободившееся место занимает новая цифра. Для 1200 первые два шага добавляют нули, и rev остаётся равным 0, поэтому ведущие нули исчезают сами. Тот же цикл без строки с rev считает количество цифр, а с условием внутри — находит наибольшую цифру. Число-палиндром проверяется так же: перевернуть копию и сравнить с оригиналом. Копия нужна потому, что цикл уменьшает переменную до нуля, и исходное значение иначе потеряется.
Задачи на числа с делителями: перебор до корня
Делитель числа N — это число d, при котором N % d == 0. Самый простой способ найти все делители — перебрать d от 1 до N и проверить остаток.
Для учебных значений такой перебор работает мгновенно. Но если N большое, проверка каждого числа займёт заметное время. Ускорить поиск помогает наблюдение: делители идут парами. Если 3 делит 36, то и 36 / 3 = 12 тоже делитель. Один из пары всегда не больше корня из N, поэтому проверять кандидатов достаточно, пока d * d <= n. Для простоты числа этого хватает: если до корня делителей нет, число простое. Для совершенного числа в тренажёре можно перебирать все делители подряд — тесты небольшие.
Разбор: простые числа до N
Простое число — это натуральное число больше 1, которое делится только на 1 и на себя. Чтобы вывести все простые до N, нужен цикл внутри цикла: внешний перебирает кандидатов, внутренний ищет делитель.
n = 20
for x in range(2, n + 1):
d = 2
while d * d <= x and x % d != 0:
d += 1
if d * d > x:
print(x, end=" ")
Внутренний цикл останавливается в двух случаях: нашёлся делитель или кандидаты закончились. Проверка после цикла различает эти случаи: если d вышел за корень, делителя не было. Единица в перебор не попадает, потому что range начинается с 2, — и это правильно: 1 не считается простым числом. Если такой код кажется запутанным, удобнее вынести проверку в отдельную функцию is_prime, как в наборе задач на функции с def и return.
Разбор: НОД и НОК
НОД двух чисел находят алгоритмом Евклида: пару (x, y) заменяют на (y, x % y), пока второе значение не станет 0. НОК вычисляют через НОД по формуле a · b / НОД.
Для 12 и 18 алгоритм проходит путь (12, 18) → (18, 12) → (12, 6) → (6, 0), и ответ — 6. Тогда НОК = 12 · 18 / 6 = 36. В решении есть тонкость: цикл портит переменные, поэтому Евклида запускают на копиях x и y, а для НОК берут исходные a и b. Деление в формуле — целочисленное //, иначе Python выведет 36.0 вместо 36. В Python есть и готовая функция math.gcd, но в учебной задаче её стоит написать самому.
Когда этот набор не подходит
Набор не подходит, если ещё нет уверенности в циклах или нужна совсем другая математика. Вот 4 таких случая.
- Не решены 8 упражнений на циклы. Здесь в каждой задаче while или for, начинать стоит с задач на циклы с разбором.
- Нужны дроби вида 2,5 и округление. Все данные в наборе целые; дробям посвящена статья о математике в Python.
- Нужно переводить в двоичную систему с 8 разрядами. Это отдельная тема информатики 8 класса со своими приёмами.
- Ребёнку 7–8 лет. Без уверенной таблицы умножения и деления с остатком эти упражнения будут непонятны, начинать лучше с блоков.
«Единица — простое число, ведь она делится только на себя». Это миф: по определению простое число имеет ровно два делителя, а у единицы он один. Поэтому функция проверки должна отвечать «нет» для 1.
«Чтобы работать с цифрами, число обязательно переводят в строку». Не подтверждается: операторы // и % справляются с этим без строк, и такой способ работает в любом языке из школьной программы.
Чего делать нельзя
Нельзя разбирать на цифры саму переменную, если исходное значение понадобится позже: после цикла в ней останется 0. Ещё шесть правил:
- Нельзя использовать / там, где нужен целый результат — получится 36.0 вместо 36.
- Не следует начинать перебор делителей с нуля: остаток от деления на 0 вызывает ZeroDivisionError.
- Не стоит забывать единицу и само N в списке делителей.
- Не стоит считать 1 простым: проверка должна начинаться с условия «меньше 2 — нет».
- Не допускается менять условие while без изменения переменной в теле — получится бесконечный повтор.
- Нельзя проверять решение одним тестом: обязательно попробуйте 1, однозначное значение и значение с нулями на конце.
Если хочется задач посложнее, загляните в подборку олимпиадных задач для начинающих: делимость там встречается регулярно. Всероссийская олимпиада школьников по информатике проходит в четыре этапа по Порядку, утверждённому приказом Минпросвещения № 678[4]. Для подготовки полезно возвращаться к решённым упражнениям через несколько дней: исследование Roediger и Karpicke показало, что самопроверка закрепляет знания лучше перечитывания[5].
Источники
[1] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[2] ФИПИ. Методические рекомендации для обучающихся по организации индивидуальной подготовки к ОГЭ 2026 года. Информатика. М., 2026.
[3] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[4] Приказ Минпросвещения России от 27.11.2020 № 678 «Об утверждении Порядка проведения всероссийской олимпиады школьников».
[5] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
[6] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
Вопросы и ответы
Почему в задачах про цифры используют while, а не for?
Заранее неизвестно, сколько цифр в записи. While повторяет действие, пока значение не станет нулём, и сам подстраивается под длину.
Можно ли решать через str?
Можно: len(str(x)) даёт количество цифр, а str(x)[::-1] — переворот. Но в условиях некоторых упражнений строки запрещены специально, чтобы потренировать // и %.
Что такое НОК и зачем он нужен?
Наименьшее общее кратное — самое маленькое значение, которое делится на оба данных. Оно нужно, например, чтобы привести дроби к общему знаменателю.
Сколько всего совершенных чисел?
Среди небольших значений их мало: 6, 28, 496, 8128. Поэтому в тестах тренажёра встречаются именно 6 и 28.
Почему для 0 количество цифр выходит 0?
Цикл while x > 0 не выполняется ни разу. В наборе вводятся только натуральные значения, а для нуля понадобилась бы отдельная проверка.
Работает ли // с отрицательными значениями так же?
Не совсем: Python округляет результат вниз, поэтому -7 // 2 даёт -4, а -7 % 2 даёт 1. Перед разбором на цифры отрицательное значение удобно сделать положительным через abs.