Есть число в десятизначной системе. Нужен алгоритм, использующий это число в качестве начального значения, чтобы сгенерировать уникальное большое число (целое). Знаков в этом "большом числе" должно быть не меньше чем на 1000кб.
На каком языке пишу - неважно. Использую библиотеку gmp, так что огромные числа не проблема. Просто нужно описание алгоритма, и довольно быстрого. Но есть нюанс, алгоритм должен быть и обратным обратным инвертируемым, т.е. из большого числа мы получаем начальное значение.
Есть число в десятизначной системе. Нужен алгоритм, использующий это число в качестве начального значения, чтобы сгенерировать уникальное большое число (целое).
Большое число не будет "уникальнее", чем исходное - 10-значное. Простейший алгоритм - генератор псевдослучайных чисел с циклом нужной длины. Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Пока ходил на улицу, понял что прошу невозможное...
ЦитатаGudleifr ()
генератор псевдослучайных чисел с циклом нужной длины.
Эта идея мне пришла ночью, но думал а как я узнаю семя при готовом наборе цифр? Ладно, спасибо за ответ :-)
Добавлено (10 января 2016, 13:05) ---------------------------------------------
ЦитатаGudleifr ()
Большое число не будет "уникальнее", чем исходное - 10-значное.
Ошибся, в десятиричной! Вообще, даже исходное число может быть большим, но не больше конечного. Но даже при 3-значном числе должно получиться 1000 значное. Хотя ладно, наверно надо придумать что-то другое.
Скорее нет, чем да. Просто слышал где-то про такой алгоритм. Но скорее всего, это был обман. Покапавшись в мусоре информации, нашел - что я чудак. Этот получается алгоритм сжатия файла, о чем я не подумал.
1. Загадываем начальное число от 1 до 100 например, назовем его N. 2. Алгоритм такой: Summa = N * 1 + N * 2 + N * 4 ... N * 2 ^^100. Тогда искомое число N = Summa / (2^^0 + 2^^1 + ... 2 ^^100);
А то есть такие хэш-функции, они и создают больше уникальные числа (хотя бывают и коллизии), только они не обратимы, если только не использовать брутфорс (но это очень долго) Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
Можно получить уникальное число с помощью хэш-функции, записать исходное число и полученое в словарь или таблицу базы данных, чтобы было взаимооднозначное соответсвие.
Если задача не на шифрование, то можно воспользоваться сложением по модулю два.
Генерируем большое число, большое и маленькое число складываем по модулю два, получаем новое большое число. Обратные процесс. Число полученное в результате сложения по модулю два и большое число складываем по модулю два, получаем маленькое.
Кстати, чтобы не таскать с собой большое число, достаточно запомнить seed. Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Воскресенье, 10 Января 2016, 15:22