Задачка знатокам математики
Jun. 11th, 2012 01:43 pm![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Как из двух целых чисел в диапазонах (0-9999) и (0-999999) составить другое число, причём так, чтобы можно было каким-то алгоритмом эти числа обратно извлечь, и не ошибиться?
Конечно, приходит в голову что-то в этом роде: 12000561 (для 12 и 561), но должен быть более красивый алгоритм...
Конечно, приходит в голову что-то в этом роде: 12000561 (для 12 и 561), но должен быть более красивый алгоритм...
no subject
Date: 2012-06-11 09:56 am (UTC)no subject
Date: 2012-06-11 10:18 am (UTC)no subject
Date: 2012-06-11 01:45 pm (UTC)И это, вторым числом лучше сделать то что до 9999, потому что так будет меньше нулей и короче запись.
no subject
Date: 2012-06-11 10:26 am (UTC)no subject
Date: 2012-06-11 10:52 am (UTC)украденопридумано до нас...no subject
Date: 2012-06-11 12:04 pm (UTC)для разнообразия можно брать 123456789 или 222222222 или еще какое-то сочетание.
Или договориться его менять периодически.
Отправили 1-го - значит 111111111, 9-го - 999999999 и т.п.
Много простіх вариантов.
Вы видимо мало в детстве в шпионов играли с одноклассниками ))))
no subject
Date: 2012-06-11 01:35 pm (UTC)no subject
Date: 2012-06-11 12:12 pm (UTC)Вам достаточно машинного алгоритма? Или желателен такой, чтобы человек быстро мог выполнить действия в уме?
no subject
Date: 2012-06-11 01:36 pm (UTC)no subject
Date: 2012-06-11 01:56 pm (UTC)Res = (A*1000000+B) xor C
Ну или Res = ((A << 20) + B) xor C
Это выполняется проще и быстрее, чем разреживание битов. Маскирующее число C можно сделать переменным в духе предложенного ув.
no subject
Date: 2012-06-11 02:29 pm (UTC)no subject
Date: 2012-06-11 02:46 pm (UTC)no subject
Date: 2012-06-11 05:07 pm (UTC)