Программа курса:
Разбор задачи: Уродливое число
Предложенный нами код решения:
def is_ugly(n):
"""
Проверяет, является ли число n уродливым числом.
Уродливым числом считается положительное целое число, которое не имеет простых множителей, отличных от 2, 3 и 5.
:param n: целое число
:return: True, если число является уродливым числом, иначе False
"""
if n <= 0:
return False
# Делаем деление на 2, 3 и 5 до тех пор, пока это возможно
for prime_factor in [2, 3, 5]:
while n % prime_factor == 0:
n //= prime_factor
# Если после всех делений число стало 1, то оно уродливое
return n == 1Задача требует проверки, является ли данное число "уродливым числом". Уродливым числом называется положительное целое число, которое не имеет простых множителей, отличных от 2, 3 и 5.
Шаг 1: Проверка на неотрицательность
if n <= 0:
return False
Мы начинаем с того, что проверяем, является ли число n положительным. Если число меньше или равно нулю, оно не может быть уродливым числом, поскольку в задаче указано, что уродливым числом может быть только положительное целое число. В таком случае возвращаем False.
Шаг 2: Деление на простые множители 2, 3 и 5
for prime_factor in [2, 3, 5]:
while n % prime_factor == 0:
n //= prime_factor
Затем мы начинаем проверку простых множителей — 2, 3 и 5. Для каждого простого числа из списка [2, 3, 5] мы проверяем, делится ли число n на это простое число.
- Внутри цикла
while n % prime_factor == 0выполняется деление числаnнаprime_factor, пока остаток от деления равен нулю. Это означает, чтоnможно разделить на этот простое число. - Каждый раз, когда делим
nна простое число, мы обновляемnкак результат этого деления (например, если делим на 2, тоn //= 2).
Этот процесс повторяется до тех пор, пока число n не перестанет делиться на 2, 3 или 5. Таким образом, на выходе мы получаем число, в котором не осталось множителей из множества {2, 3, 5}.
Шаг 3: Проверка, что результат равен 1
return n == 1
После того как все возможные деления на 2, 3 и 5 выполнены, мы проверяем, если оставшееся число n стало равным 1. Это означает, что все простые множители числа были только 2, 3 или 5, и поэтому число является уродливым. Если же результат не равен 1, значит, в числе были другие простые множители, и оно не является уродливым.
Пример 1:
Ввод: n = 6
- Проверка
n <= 0: число положительное, продолжаем. - Делим на 2:
6 % 2 == 0,6 //= 2→n = 3. - Делим на 3:
3 % 3 == 0,3 //= 3→n = 1. - Оставшийся результат
n == 1, значит число уродливое, возвращаемTrue.
Вывод: True
Пример 2:
Ввод: n = 1
- Проверка
n <= 0: число положительное, продолжаем. - Делим на 2, 3 и 5, но деления не происходят, так как
n = 1. - Оставшийся результат
n == 1, значит число уродливое, возвращаемTrue.
Вывод: True
Пример 3:
Ввод: n = 14
- Проверка
n <= 0: число положительное, продолжаем. - Делим на 2:
14 % 2 == 0,14 //= 2→n = 7. - Делим на 3 и 5: деления не происходят, так как
7не делится на 3 и 5. - Оставшийся результат
n == 7, что является простым числом, не входящим в множество{2, 3, 5}, значит число не уродливое, возвращаемFalse.
Вывод: False