@gth-other

Как хранить два натуральных числа в одном, не превышающем их произведение (границы множества чисел для обоих из чисел известны)?

Извиняюсь за столь идиотский вопрос, но я уже перерыл весь гугл.

Есть число a, лежащее в промежутке [0; 5], и число b, лежащее в промежутке [0; 1]. Нужно представить эти числа числом c, причем чтобы никакие пары чисел не имели одинакового представления. Гугл заботливо выдает способы от самых наивных вроде формул a * (max(a, b) + 1) + b, до каких-то диких представлений вроде сумм степеней или формул на три строчки. Но все это не подходит, так как мне нужно чтобы полученное число c лежало в промежутке [0; 11] и я уверен что это возможно, так как из элементарной комбинаторики выходит, что всего возможно 6 * 2 различных комбинаций, что прекрасно помещается в заданный мной промежуток числа c: но вот придумать самому ничего не получается.

P.S. Очень желательна производительность.
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
все это не подходит, так как мне нужно чтобы полученное число c лежало в промежутке [0; 11]


Ну так a * (max(b) + 1) + b же.
Иными словами мы делаем двузначное число в позиционной системе исчисления с неравными весами разрядов, младший разряд -- b, старший разряд -- a. Вес младшего разряда -- 1, вес старшего -- max(b) + 1.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@U235U235
Зачем тут формула? Можно использовать просто словарь или кортеж из кортежей. Индекс это число C. Обратная операция
a,b=divmod(c,2)
dct={i[0]:i[1] for i in enumerate((a,b) for a in range(6) for b in range(2))}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы