| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Работа с громадными числами |
| Автор: Shmity 2.10.2007, 10:08 |
| Вообщем, если в кратце, требуется разработать алгоритм для работы с числами приблизительно с 50000 знаков, без потери последних на Delphi. Вроде как можно числа записывать в динамическую память, но как это сделать не знаю. Всем кто поможет буду оч. признателен. |
| Автор: Alexeis 2.10.2007, 10:21 |
| Какой алгоритм? Числа лучше в динамическом массиве хранить. Если задача не академическая, то проще заюзать что-то готовое. |
| Автор: BaD_SeCt0R 2.10.2007, 11:30 |
| Тогда число будет храниться так: a[0]*2^8+a[1]*2^16+...+a[n]*2^(n+1)*8, где a - это динамический массив. |
| Автор: Shmity 2.10.2007, 16:39 |
| BaD_SeCt0R, Alexeis, спс |
| Автор: Gershkovich 2.10.2007, 16:51 |
| Shmity, Не знаю поможет тебе моя идея или нет Мы в универе на лабораторных занятиях перемножали большие числа. Каждое число - это массив байтов причем каждый элемент должен быть в интервале 0-9, т.е. как бы представлял собой десятичную цифру. Имея два таких массива перемножали столбиком, как это делают в школе. Только промежуточные произведения записывали не на бумагу а во временные массивы. Может тебя такой подход натолкнет на продуктивные мысли... |
| Автор: Shmity 2.10.2007, 22:28 |
| Gershkovich, спс оч. интересная и полезная мысль надо ее доработать |
| Автор: Shmity 3.10.2007, 06:49 |
| BaD_SeCt0R, сложность программы заключаеться не в хранении(сколько места и как), а в скорости работы проги в целом(желательно не более минуты общее время работы проги), так что мне пойдут любые варианты. Да и операции у Gershkovich, будет чуть попроще реализовать. А еще такой вопрос уже ко всем: можно ли хранить и производить операции с такими громадными числами если выделить для них память c помощью getmem? И как потом с ними производить операции(если можно хранить, желательно хоть на каком нибудь малюсеньком примере, а то пробывал так делать делфи выдает ошибку постоянно)? |
| Автор: hihi 3.10.2007, 07:02 |
| ребята, извините за офтоп, просто сккажите, изнываю от любопытсва, для каких задач это требуется? |
| Автор: Alexeis 3.10.2007, 08:53 |
| Shmity, зачем нужен GetMem? SetLength() меняет размер динамического массива и выделяет столько памяти сколько нужно. |
| Автор: Kuvaldis 3.10.2007, 08:57 |
| Shmity, http://algolist.manual.ru/maths/longnum.php Читай и разбирайся, здесь и теория, и практика |
| Автор: Esperito 3.10.2007, 20:38 | ||
На этом основана вся современная криптография. |
| Автор: Alexeis 3.10.2007, 21:41 |
Ну не сказал бы что там нужны настолько большие числа, обычно кодирование идет блочно. Если ключ даже 1024 бита, то это примерно 300 знаков, ну пусть даже 500 знаков нужно, но 50000. 50000 это ж на 2 порядка больше. |
| Автор: Esperito 4.10.2007, 17:16 | ||
Для формирования ключа нужно вычислять очень большие простые числа (в PGP например). |