Проверка делимости чисел нацело в Python

Раздел: Основы Python -> Задачи на условные операторы

Проверка кратности в Python

Проверка кратности (делимости нацело) – одна из базовых задач, решаемых с помощью условных операторов. В Python для этого используется оператор %, возвращающий остаток от деления. Если остаток равен нулю, то первое число кратно второму.

Как проверить, делится ли одно число на другое без остатка?

Самый простой и эффективный способ – применить оператор взятия остатка % в условной конструкции.

a = 12
b = 4
if a % b == 0:
    print(f"{a} кратно {b}")
else:
    print(f"{a} не кратно {b}")

кратен python (проверка кратности в python)

12 кратно 4
  1. Вычисляется остаток от деления a на b.
  2. Сравнивается с нулём.
  3. Выводится соответствующий результат.

Типичная ошибка: деление на ноль.

Если b = 0, возникнет исключение ZeroDivisionError. Перед проверкой кратности рекомендуется явно убедиться, что делитель не равен нулю:

if b != 0 and a % b == 0:
    print("Кратно")

Как проверить чётность числа (кратность двум)?

num = 7
if num % 2 == 0:
    print("Чётное")
else:
    print("Нечётное")

Для отрицательных чисел оператор % в Python возвращает остаток того же знака, что и делитель. Поэтому -3 % 2 равно 1 (а не -1). Это не влияет на проверку чётности, так как результат сравнивается с нулём.

Как проверить кратность трём и пяти (задача FizzBuzz)?

Обычно требуется вывести разные сообщения в зависимости от кратности 3, 5 или обоим числам.

n = 15
if n % 15 == 0:
    print("FizzBuzz")
elif n % 3 == 0:
    print("Fizz")
elif n % 5 == 0:
    print("Buzz")
else:
    print(n)
FizzBuzz

Порядок проверки важен: сначала проверяется кратность 15 (3 и 5 одновременно), иначе для числа 15 было бы выведено только "Fizz".

Как использовать divmod для проверки кратности?

Встроенная функция divmod возвращает частное и остаток. Можно взять остаток и сравнить с нулём.

a, b = 20, 6
_, remainder = divmod(a, b)
if remainder == 0:
    print("Кратно")
else:
    print("Не кратно")

Этот вариант избыточен и менее производителен, чем прямой оператор %, так как вычисляется и частное, и остаток.

Как проверить кратность нескольким числам одновременно (все делители)?

Функция all позволяет проверить, что число делится на каждый из списка делителей.

number = 30
divisors = [2, 3, 5]
if all(number % d == 0 for d in divisors):
    print("Кратно всем")
else:
    print("Не кратно хотя бы одному")

Если в списке есть ноль, получим ошибку деления на ноль. Необходимо предварительно удалить ноль из divisors или обработать отдельно.

Как проверить кратность с помощью целочисленного деления?

Можно умножить результат целочисленного деления на делитель и сравнить с исходным числом:

a, b = 18, 4
if a // b * b == a:
    print("Кратно")
else:
    print("Не кратно")

Этот способ эквивалентен a % b == 0, но менее читаем и может работать медленнее из-за двух операций (деление и умножение).

Как проверить кратность с вещественными числами?

Плавающая арифметика неточна, поэтому прямое сравнение остатка с нулём может не сработать. Рекомендуется использовать math.isclose из модуля math или округление.

import math
a = 10.0
b = 3.0
remainder = a % b
if math.isclose(remainder, 0.0, rel_tol=1e-9):
    print("Почти кратно")
else:
    print("Не кратно")

Из-за погрешностей 10 % 3 может дать 1.0, а не 0.0, поэтому использование вещественных чисел для проверки кратности обычно не рекомендуется. Лучше работать с целыми числами.

Расширенные примеры проверки кратности

Генерация чисел, кратных заданному значению

Функция, возвращающая список всех кратных чисел в заданном диапазоне:

Пример
def multiples(base, limit):
    return [x for x in range(base, limit+1, base)]

print(multiples(7, 50))
[7, 14, 21, 28, 35, 42, 49]

Фильтрация кратных чисел из списка

Использование встроенной функции filter для отбора элементов, кратных 3:

Пример
data = [1, 3, 4, 9, 12, 15, 20]
result = list(filter(lambda x: x % 3 == 0, data))
print(result)
[3, 9, 12, 15]

Проверка года на високосность (комбинированная кратность)

Год високосный, если кратен 400, или кратен 4 и не кратен 100.

Пример
def is_leap(year):
    return year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)

for y in [1900, 2000, 2024, 2025]:
    print(f"{y}: {is_leap(y)}")
1900: False
2000: True
2024: True
2025: False

Проверка кратности всех элементов списка одному числу

Определение, делятся ли все элементы из nums на k без остатка:

Пример
nums = [10, 20, 30, 40]
k = 10
all_divisible = all(num % k == 0 for num in nums)
print(all_divisible)
True

Поиск первого числа в последовательности, кратного заданному

Цикл while с проверкой:

Пример
start = 5
step = 3
limit = 100
while start <= limit:
    if start % 7 == 0:
        print(f"Найдено: {start}")
        break
    start += step
else:
    print("Ничего не найдено")
Найдено: 14

Простая реализация алгоритма Евклида (НОД) с использованием кратности

При нахождении наибольшего общего делителя проверяется остаток от деления.

Пример
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

print(gcd(48, 18))
6

Проверка кратности с помощью тернарного оператора для компактности

Пример
x = 10
y = 5
result = "кратно" if x % y == 0 else "не кратно"
print(result)
кратно

Условный вывод для каждого элемента кортежа (кратные 2 и 3)

Пример
numbers = (2, 3, 4, 6, 9, 12, 15)
for n in numbers:
    if n % 2 == 0 and n % 3 == 0:
        print(f"{n}: кратно 2 и 3")
    elif n % 2 == 0:
        print(f"{n}: кратно 2")
    elif n % 3 == 0:
        print(f"{n}: кратно 3")
    else:
        print(f"{n}: не кратно ни 2, ни 3")
2: кратно 2
3: кратно 3
4: кратно 2
6: кратно 2 и 3
9: кратно 3
12: кратно 2 и 3
15: кратно 3

Проверка кратности в Python - comments

En
кратен python (python)