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

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

  • автор:

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

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

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

Условие

По данному натуральному числу N найдите наибольшую целую степень двойки, не превосходящую N. Выведите показатель степени и саму степень.

Операцией возведения в степень пользоваться нельзя!

Решение

n = int(input()) two_in_power = 2 power = 1 while two_in_power 

Комментарии

Nate Tiger :

Вот такая реализация покороче:
n = int(input())
i = 1
while n > = 2**i:
i += 1
print((i-1), 2**(i-1))

Аноним : Там нельзя использовать возведение в степень с помощью «**» Dmitry : n = int(input())
i = 2
nn = 1
while i i *= 2
nn += 1
print(nn - 1, i // 2) Farrukh : def power_of_two(n):
sqr=1
while(sqr <=n):
print(sqr,end=' ')
sqr=sqr*2

Добавить комментарий Отменить ответ

ЕГЭ на соточку для чайников

Прошу прощения, что так долго пропадал. Питошка вернулся, да еще и с группой в вконтакте, подписывайтесь. Помимо этого, на питошке откроется новая рубрика, в которой будут четкие объяснения всех заданий ЕГЭ и ОГЭ по информатике, внимательно прочитав которые, я уверен, вы улучшите свои баллы на экзамене ��

Как определить, является ли число степенью двойки на python3?

Проблема в том, что log(16, 2) # = 4.0 по мнению интерпретатора не является целым числом.

Как можно по другому проверить является ли n степенью двойки?

  • Вопрос задан более трёх лет назад
  • 24740 просмотров
Комментировать Решения вопроса 2 "I'm here to consult you" © Dogbert

Ох..но, проверять степень двойки с помощью логарифма.
Вот вам идея для решения попроще: n & (n - 1) равно нулю только для нуля и степеней двойки (& -- побитовое "и").

Ответ написан более трёх лет назад Нравится 2 1 комментарий

xozzslip

boi @xozzslip Автор вопроса Спасибо большое.

xozzslip

boi @xozzslip Автор вопроса
n = 16 from math import log Logn = log(n, 2) if (Logn == int(Logn)): print "True" else: print "False"

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2

donkaban

Умею рисовать тени
return x && ((x & (x - 1)) == 0); Гугл отключили?
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
object_Object @object_Object
Бляха дошутитесь так и рил отрубят от гуглсервисов
Drugs-driven development

Тебе же в прошлом вопросе разжевали всё, зачем снова плодить глупые вопросы? Но если ты прошлый вопрос спрашивал, чтобы таким образом проверять на степень двойки, то лучше сразу уходи их профессии. Изучи хотя бы основы построения алгоритмов.

Нормальная и быстрая проверка на степень двойки делается через бинарные операции:

def check2rec(num): if num == 1: return True if num & 1: return False return check2rec(num >> 1)

Плюс, эту функцию можно ещё пооптимизировать.

Ну и бенчмарки, чтобы доказать ущербность логарифмического метода:

def check2rec(num): if num == 1: return True if num & 1: return False return check2rec(num >> 1) def check2log(num): r = log(num, 2) return int(r) == r numbers = list() print('Generating numbers. ') for _ in range(1000): numbers.append(randint(10000, 1000000)) print('Done!') start = datetime.datetime.now() for _ in range(10000): for n in numbers: check2rec(n) print('Rec: ', datetime.datetime.now() - start) start = datetime.datetime.now() for _ in range(10000): for n in numbers: check2log(n) print('Log: ', datetime.datetime.now() - start)

Результаты:

Rec: 0:00:07.408942 Log: 0:00:12.101660

Разница почти в 2 раза.

P.S. С такими "знаниями" тебя в более-менее приличное место не возьмут никогда. Изучи сперва программирование (т.е. построение алгоритмов), а не язык. Почитай Вирта, Кормена, или SICP.

Ошибка сервера в приложении '/'.

Описание: На сервере возникла ошибка приложения. Текущая пользовательская настройка ошибок для этого приложения не позволяет удаленно просматривать сведения об ошибке данного приложения (из соображений безопасности). Однако, сведения можно просматривать в браузерах, запущенных на локальном сервере.

Сведения: Для разрешения просмотра сведений данного сообщения об ошибке на локальном сервере создайте тег в файле конфигурации "web.config", который находится в корневом каталоге текущего веб-приложения. В теге следует задать атрибут "mode" со значением "Off".

Примечания: Отображаемую в данный момент страницу ошибок можно заменить на пользовательскую страницу ошибок, изменив атрибут "defaultRedirect" тега конфигурации приложения таким образом, чтобы он содержал URL-адрес пользовательской страницы ошибок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *