Разбор задачи: Сила Трёх

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

def is_power_of_three(n):
    """
    Проверяет, является ли число степенью числа 3.
    
    Число n является степенью числа 3, если существует целое число x, такое что n == 3^x.
    
    :param n: целое число
    :return: True, если число является степенью 3, иначе False
    """
    if n <= 0:
        return False
    
    while n % 3 == 0:
        n //= 3
    
    return n == 1

Нужно определить, является ли целое число n степенью числа 3. То есть проверить, существует ли такое целое число x, что n равно 333 в степени xxx.


Алгоритм решения:

  1. Проверка базовых случаев:

    if n <= 0:
        return False
    
    • Если число n меньше или равно нулю, оно не может быть степенью числа 3, так как степени числа 3 всегда положительные.
    • Возвращаем False.

  1. Итеративное деление на 3:

    while n % 3 == 0:
        n //= 3
    
    • Пока число n делится на 3 без остатка (остаток от деления равен нулю), уменьшаем его, деля на 3.
    • Таким образом, мы сокращаем значение n до тех пор, пока оно не станет равно 1 (если это степень числа 3) или пока больше не сможет делиться на 3.

  1. Проверка конечного результата:

    return n == 1

    • После завершения цикла проверяем, осталось ли число равным 1.
    • Если n равно 1, значит, исходное число действительно было степенью числа 3.
    • Если n не равно 1, то оно не является степенью числа 3.

Примеры работы алгоритма:

  1. Пример: n = 27
    • На первой итерации: 27 делится на 3, результат деления — 9.
    • На второй итерации: 9 делится на 3, результат деления — 3.
    • На третьей итерации: 3 делится на 3, результат деления — 1.
    • После завершения цикла n равно 1, возвращаем True.
  2. Пример: n = 0
    • Проверяем условие if n <= 0. Оно выполняется, возвращаем False.
  3. Пример: n = -1
    • Проверяем условие if n <= 0. Оно выполняется, возвращаем False.
  4. Пример: n = 10
    • Проверяем делимость на 3: 10 не делится на 3, цикл завершается.
    • После выхода из цикла n не равно 1, возвращаем False.

 



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