Можно попробовать что-то такое: Есть стандартная функция
(ноль включаем в натуральные),
,
правда, для её обращения надо считать квадратный корень. Теперь можно отобразить КПУ только на нечётные числа (
), а коды пар — на чётные (умножаем на два), что всегда даст определить, из чего состоит пара. Это универсально, но может не подходить в деталях (например, корень не нравится). Можно использовать тот же подход, но с другой функцией для кода пары. Например, если для хранения компонент пары достаточно
и
бит, можно приписать их друг к другу, а к этому ещё приписать код
(или
— если одна из компонент имеет тенденцию быть короче другой, здесь есть смысл брать соответствующее ей число бит). Код, например,
вот такой. Целочисленный sqrt для разбора полученного числа вычислять не понадобится. Если размер каждого поля может быть до 32 бит, и притом того фиксированного — только чётным их числом, можно прямо кодировать
четырьмя битами, хотя выглядит всё равно как-то расточительно.
В общем, задача и сама странная.