Условие
По данному натуральному числу N найдите наибольшую целую степень двойки, не превосходящую N. Выведите показатель степени и саму степень.
Операцией возведения в степень пользоваться нельзя!
Решение
n = int(input()) two_in_power = 2 power = 1 while two_in_powerКомментарии
Nate Tiger :Вот такая реализация покороче:
Аноним : Там нельзя использовать возведение в степень с помощью «**» Dmitry : n = int(input())
n = int(input())
i = 1
while n > = 2**i:
i += 1
print((i-1), 2**(i-1))
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Добавить комментарий Отменить ответ
ЕГЭ на соточку для чайников
Прошу прощения, что так долго пропадал. Питошка вернулся, да еще и с группой в вконтакте, подписывайтесь. Помимо этого, на питошке откроется новая рубрика, в которой будут четкие объяснения всех заданий ЕГЭ и ОГЭ по информатике, внимательно прочитав которые, я уверен, вы улучшите свои баллы на экзамене
Как проверить является ли натуральное число степенью двойки в Python
Теперь, взяв and между n и n-1, мы получим все нули в двоичной записи. Для числа, не являющегося степенью двойки, мы не получим настолько "инвертированные" записи. По аналогии с десятичной системой: только отняв от круглого числа вроде 10000 или 1000 единицу, мы получим в результате все девятки.
Проверку на n=0 можно не делать, так как по условию задачи n - натуральное. То есть итоговое решение будет выглядеть как:
Как определить, является ли число степенью двойки на python3?
Проблема в том, что log(16, 2) # = 4.0 по мнению интерпретатора не является целым числом.
Как можно по другому проверить является ли n степенью двойки?
- Вопрос задан более трёх лет назад
- 24252 просмотра
Ох..но, проверять степень двойки с помощью логарифма.
Вот вам идея для решения попроще: n & (n - 1) равно нулю только для нуля и степеней двойки (& -- побитовое "и").


n = 16 from math import log Logn = log(n, 2) if (Logn == int(Logn)): print "True" else: print "False"
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2

Умею рисовать тени
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.
Проверить, является ли число n точной степенью двойки
2) Ввести число n с клавиатуры. Если число n является точной степенью двойки, вывести “YES”, в противном случае “NO”.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Является ли введённое натуральное число степенью двойки
Во многих задачах, связанных с компьютерами, особенно близких к аппаратной части, важную роль.

Выведите слово YES, если число N является точной степенью двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или.
Проверить, является ли заданное натуральное число степенью двойки
Здравствуйте, форумчане. Есть следующее задание: Дано натуральное число N. Выведите слово.

Является ли число степенью двойки?
Прошу помочь найти ошибку. Смотрю на код, рассуждаю, вроде всё должно работать. Варианты с.
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
и что у вас не получается? и что пробовали?
562 / 302 / 189
Регистрация: 20.05.2016
Сообщений: 592
594 / 286 / 178
Регистрация: 06.06.2016
Сообщений: 547
1 2 3 4 5
n = int(input()) if n & (n - 1) : print("NO") else: print("YES")
![]()
4615 / 2036 / 359
Регистрация: 17.03.2012
Сообщений: 10,103
Записей в блоге: 6
Сообщение от regio1961 
if n & (n - 1)
Это вряд ли. Будет True, если в двоичной записи есть хоть одна единица. Но вообще подход интересный.
594 / 286 / 178
Регистрация: 06.06.2016
Сообщений: 547
Сообщение от dondublon 
Это вряд ли. Будет True, если в двоичной записи есть хоть одна единица. Но вообще подход интересный.
__________________
А запустить программу не пробовали, перед тем как высказать свое мнение?
![]()
4615 / 2036 / 359
Регистрация: 17.03.2012
Сообщений: 10,103
Записей в блоге: 6
regio1961, перепутал "YES" и "NO". Бывает. Привык, что в первой ветке то, что по True.
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
1 2 3
n = int(input('n = ')) rez = ['no','yes'] print(rez[n & (n-1) == 0])
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
f=lambda n: ((n&(n-1)==0)and n) and (True) or (False)
12 / 12 / 10
Регистрация: 17.06.2016
Сообщений: 70
1 2 3 4 5 6 7 8 9 10
s=2 a=0 while as: for i in range(100): a=2**i if a==s: print('true') break if a!=s: print('no')
Простой вариант, работает,но исправьте ошибку(брейк не выходит из цикла)
Регистрация: 03.01.2017
Сообщений: 2
1 2 3 4 5 6 7 8 9 10 11 12
# -*- coding: utf-8 -*- n = int(input('Введите число: ')) s = 1 x = 0 while sn: s *= 2 x+=1 if s==n: print('Да!') break else: print('Нет!')
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
1 2 3 4 5 6 7
def power2(n): if n 0: return False if n == 1: return True return n & 1 == 0 and power2(n // 2) for i in range(10): print(i, power2(i))
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
def power_of_2(n): print(('NO', 'YES')[bin(n)[2:].count('1') == 1])
def power_of_2(n): print(('NO', 'YES')[not bin(n)[2:].count('1')-1])
Регистрация: 02.04.2016
Сообщений: 351
regio1961, что-то я не понял вашего решения. можете объяснить что это за условие?
if n & (n - 1)
594 / 286 / 178
Регистрация: 06.06.2016
Сообщений: 547
Это условие того, что n НЕ является степенью 2. Для его понимания рассмотрите примеры, задавая n в двоичном виде.
Регистрация: 02.04.2016
Сообщений: 351
regio1961, гениальненько
201 / 88 / 15
Регистрация: 27.07.2018
Сообщений: 323
regio1961, Как называется ваша конструкция
Вернее, как она читается?
if n & (n - 1)
Хочу побольше об этом узнать, можете дать название?
594 / 286 / 178
Регистрация: 06.06.2016
Сообщений: 547
Сообщение от CyberGame 
можете дать название?
Побитовое И чисел n и n - 1
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
а как же 0?
594 / 286 / 178
Регистрация: 06.06.2016
Сообщений: 547
Сообщение от Jabbson 
а как же 0?
Работает только для положительных целых чисел
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Написать функцию power_of_two, которая определяет является ли заданное число степенью двойки
# Написать функцию power_of_two, которая определяет является ли заданное число степенью двойки. #.

Проверить является ли число степенью тройки
def is_power_three(n): print(n) if n == 1: return 'Є степенем трійки' if n.
Проверить, является ли число a степенью числа b
Решите задачу одним циклом while, допускается применение условных операторов. Задано два числа a.
Цикл проверить, является ли число степенью числа 3
Дано целое число N>0, если оно является степенью числа 3 то вывести TRUE, если нет - FALSE

Проверить является ли число точной степенью двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или.
Проверить, является ли число точной степенью двойки
Здравствуйте, помогите пожалуйста решить задачу. Дано натуральное число N. Выведите слово YES.