Разбор задачи: Уродливое число

Предложенный нами код решения:

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

  1. Проверка n <= 0: число положительное, продолжаем.
  2. Делим на 2: 6 % 2 == 0, 6 //= 2n = 3.
  3. Делим на 3: 3 % 3 == 0, 3 //= 3n = 1.
  4. Оставшийся результат n == 1, значит число уродливое, возвращаем True.

Вывод: True

Пример 2:

Ввод: n = 1

  1. Проверка n <= 0: число положительное, продолжаем.
  2. Делим на 2, 3 и 5, но деления не происходят, так как n = 1.
  3. Оставшийся результат n == 1, значит число уродливое, возвращаем True.

Вывод: True

Пример 3:

Ввод: n = 14

  1. Проверка n <= 0: число положительное, продолжаем.
  2. Делим на 2: 14 % 2 == 0, 14 //= 2n = 7.
  3. Делим на 3 и 5: деления не происходят, так как 7 не делится на 3 и 5.
  4. Оставшийся результат n == 7, что является простым числом, не входящим в множество {2, 3, 5}, значит число не уродливое, возвращаем False.

Вывод: False

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии