Как определить, является ли число точной степенью двойки в Python?
Чтобы определить, является ли число точной степенью двойки в Python, можно использовать поразрядное логическое И (&) между числом и числом на единицу меньшим, чтобы проверить, является ли оно дробным.
def is_power_of_two(n):
return n & (n - 1) == 0
number = 16
if is_power_of_two(number):
print(f"Число {number} является точной степенью двойки")
else:
print(f"Число {number} не является точной степенью двойки")
Детальный ответ
Как определить, является ли число точной степенью двойки в Python
В программировании часто возникает потребность в определении, является ли число точной степенью двойки. В Python существуют несколько подходов для решения этой задачи. В этой статье мы рассмотрим несколько методов, объясним их использование и предоставим примеры кода.
Метод 1: Проверка через битовую операцию И
Один из способов определить, является ли число точной степенью двойки, заключается в использовании битовой операции И (&) с предыдущим числом (n-1), где n - проверяемое число. Если результат операции равен нулю, это означает, что число является точной степенью двойки.
def is_power_of_two(n):
return n & (n - 1) == 0
print(is_power_of_two(16)) # Output: True
print(is_power_of_two(17)) # Output: False
В приведенном выше примере функция is_power_of_two
принимает число n
и возвращает True
, если число является точной степенью двойки, и False
в противном случае. В первом вызове функции число 16 является точной степенью двойки, поэтому результат будет True
. Во втором вызове функции число 17 не является точной степенью двойки, поэтому результат будет False
.
Метод 2: Проверка через битовую операцию Сдвиг вправо
Второй метод для определения является ли число точной степенью двойки состоит в использовании битовой операции сдвига вправо (>>) на одну позицию до момента, пока число не станет равным нулю. Если число становится равным нулю, это означает, что исходное число является точной степенью двойки.
def is_power_of_two(n):
while n > 1:
n = n >> 1
return n == 1
print(is_power_of_two(16)) # Output: True
print(is_power_of_two(17)) # Output: False
В приведенном примере функция is_power_of_two
начинает сдвигать число вправо на одну позицию до тех пор, пока число больше 1. Если в результате сдвига число становится равным 1, то исходное число является точной степенью двойки и функция вернет True
. В противном случае, если число не становится равным 1, то оно не является точной степенью двойки и функция вернет False
. В приведенных примерах число 16 является точной степенью двойки, поэтому результат будет True
, а число 17 не является точной степенью двойки, поэтому результат будет False
.
Метод 3: Проверка через функцию math.log2
Третий метод для определения является ли число точной степенью двойки состоит в использовании функции math.log2
из модуля math
. Функция math.log2
возвращает логарифм числа по основанию 2. Если результат логарифма равен целому числу, это означает, что исходное число является точной степенью двойки.
import math
def is_power_of_two(n):
return math.log2(n).is_integer()
print(is_power_of_two(16)) # Output: True
print(is_power_of_two(17)) # Output: False
В приведенном примере функция is_power_of_two
использует функцию math.log2
для вычисления логарифма числа n
по основанию 2. Затем функция проверяет, является ли результат логарифма целым числом с помощью метода is_integer
. Если результат логарифма является целым числом, то исходное число является точной степенью двойки и функция вернет True
. В противном случае, если результат не является целым числом, то исходное число не является точной степенью двойки и функция вернет False
. В приведенных примерах число 16 является точной степенью двойки, поэтому результат будет True
, а число 17 не является точной степенью двойки, поэтому результат будет False
.