Как проверить является ли натуральное число степенью двойки в Python

Как проверить является ли натуральное число степенью двойки в Python


Ответы (3 шт):

Автор решения: Fizzika NET

Автор выше прав. Объясню математику.

Натуральное число, представленное степенью двойки, имеет в своей двоичной записи одну единицу

Например:

n: 10000000, 01000000, 00100000, ..., 00000001

Что будет, если от такого числа отнимем единицу?

n-1: 01111111, 00111111, 00011111, ..., 00000000

Теперь, взяв and между n и n-1, мы получим все нули в двоичной записи. Для числа, не являющегося степенью двойки, мы не получим настолько "инвертированные" записи. По аналогии с десятичной системой: только отняв от круглого числа вроде 10000 или 1000 единицу, мы получим в результате все девятки.

Проверку на n=0 можно не делать, так как по условию задачи n - натуральное. То есть итоговое решение будет выглядеть как:

(n & (n-1) == 0)

→ Ссылка
Автор решения: Danis

как вариант:

bin(n).count("1") == 1
→ Ссылка