Ctrl K

Наименьшее число, дающее OR с соседом

Средняя
Дан массив простых чисел primes. Для каждого primes[i] найдите наименьшее неотрицательное целое a, такое что a OR (a + 1) == primes[i] (побитовое ИЛИ числа и следующего за ним числа). Если такого a нет, на этом месте должно стоять -1. Верните массив ответов той же длины, в том же порядке.
Пример 1
primes=[19, 2, 23] → [17, -1, 19]

19 = 10011₂: 17 OR 18 = 10001₂ OR 10010₂ = 10011₂ = 19, и меньшего подходящего числа нет. Для 2 ответа нет: из двух соседних чисел одно нечётное, поэтому a OR (a + 1) всегда нечётно — ставим -1. Для 23 = 10111₂ подходит 19: 19 OR 20 = 23.

Пример 2
primes=[3, 31] → [1, 15]

1 OR 2 = 3, а 15 OR 16 = 11111₂ = 31.

Пример 3
primes=[5] → [4]
Ограничения
  • 1 ≤ len(primes) ≤ 100
  • 2 ≤ primes[i] ≤ 10⁹
  • Каждое primes[i] — простое число
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВсе наборы добавок СредняяВсе разные наборы карт СредняяЛишний среди троек СредняяДва числа без пары СредняяНайти лишнюю копию Средняя
загружаем Python…
Вход
primes=[19, 2, 23]
Ожидается
[17, -1, 19]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 229 тестов на сервере, включая скрытые.