Вы можете использовать двоичные представления чисел и выводить все числа, между которыми установлен только один бит:
0 = 00000000
10 = 00001010
=>
00000001 (1)
00000010 (2)
00000100 (4)
00001000 (8)
Таким образом, ваша проблема сводится к тому, чтобы найти первую степень на две больше, чем минимум, а затем сместить влево, когда вы меньше максимума. Также можно сбросить все установленные биты в максимальном значении, кроме самого высокого, и затем сдвинуть вправо, пока вы больше минимального значения.