Красиво реализовано. Я по-другому делал. Ключ(32бита) разбивался на 4 части. Два числа уменьшались на единицу каждые 8 байт и два счетчика увеличивались, когда первые числа были равны 0.
(K=33, биты от 1-32, т.е. Первый бит = K-32, последний К-1)
Код:
1 Число (уменьшается каждые 8 байт):
Bit [k - 13]
Bit [k - 14]
Bit [k - 15]
Bit [k - 16]
Bit [k - 1]
Bit [k - 2]
Bit [k - 3]
Bit [k - 4]
Bit [k - 5]
Bit [k - 6]
Bit [k - 7]
Bit [k - 8]
2 Число (уменьшается каждые 8 байт):
Bit [k - 31]
Bit [k - 32]
Bit [k - 17]
Bit [k - 18]
Bit [k - 19]
Bit [k - 20]
Bit [k - 21]
Bit [k - 22]
Bit [k - 23]
3 Число (увеличивается, когда первое равно 0):
Bit [k - 32]
Bit [k - 17]
Bit [k - 18]
Bit [k - 19]
Bit [k - 20]
Bit [k - 21]
Bit [k - 22]
Bit [k - 23]
Bit [k - 24]
Bit [k - 9]
Bit [k - 10]
Bit [k - 11]
Bit [k - 12]
4 Число (увеличивается когда 2-ое равно 0):
Bit [k - 25]
Bit [k - 26]
Bit [k - 27]
Bit [k - 28]
Bit [k - 29]
Bit [k - 30]
Bit [k - 31]
В С++ можно реализовать с помощью битовых массивов.