Давайте немного обобщим проблему. Я собираюсь написать побитовые операторы, такие как OR, AND и SR (сдвиг вправо).
Учитывая натуральное число X, интервалы [lo_1, hi_1], ..., [lo_N, hi_N], состоящие из натуральных чисел, и бита b в {0, 1}, определяют, существуют ли натуральные числа y_1 в [ lo_1, hi_1], ..., y_N в [lo_N, hi_N], такие, что, если Y = y_1 ИЛИ ... ИЛИ y_N, оно содержит (X AND Y) = X и существует i, такое что x_i <= hi_i - b. </p>
Базовый случай для моего рекурсивного алгоритма - это когда lo_1 = hi_1 = lo_2 = ... = hi_n = 0. Существует решение тогда и только тогда, когда X = 0 и b = 0.
Индуктивно, подготовьте подзадачу, допустив, что X '= X SR 1 и lo_i' = lo_i SR 1 и hi_i '= hi_i SR 1. Пусть Odd (i) будет истинным тогда и только тогда, когда hi_i AND 1 = 1. Пусть Odd + (i) быть истинным тогда и только тогда, когда Odd (i) и lo_i
Если существует такое i, что Odd + (i), то пусть b '= 0. В противном случае пусть b' = b.
Если Х И 1 = 1:
Если существуют такие разные i и j, что Odd + (i) и Odd (j), то пусть b '= 0. Если не существует j, такого, что Odd (j), то пусть b' = 1. В противном случае, пусть b '= b.
Вернуть ответ для подзадачи.