![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Shmity |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
Вообщем, если в кратце, требуется разработать алгоритм для работы с числами приблизительно с 50000 знаков, без потери последних на Delphi. Вроде как можно числа записывать в динамическую память, но как это сделать не знаю. Всем кто поможет буду оч. признателен.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Какой алгоритм? Числа лучше в динамическом массиве хранить. Если задача не академическая, то проще заюзать что-то готовое.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: 4 Всего: 18 |
Тогда число будет храниться так: a[0]*2^8+a[1]*2^16+...+a[n]*2^(n+1)*8, где a - это динамический массив.
-------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
| Shmity |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
BaD_SeCt0R,
Alexeis, спс |
|||
|
||||
| Gershkovich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 8.2.2006 Репутация: 0 Всего: 2 |
Shmity, Не знаю поможет тебе моя идея или нет
Мы в универе на лабораторных занятиях перемножали большие числа. Каждое число - это массив байтов причем каждый элемент должен быть в интервале 0-9, т.е. как бы представлял собой десятичную цифру. Имея два таких массива перемножали столбиком, как это делают в школе. Только промежуточные произведения записывали не на бумагу а во временные массивы. Может тебя такой подход натолкнет на продуктивные мысли... |
|||
|
||||
| Shmity |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
Gershkovich, спс оч. интересная и полезная мысль надо ее доработать
|
|||
|
||||
| BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: 4 Всего: 18 |
Shmity, при вычислениях очень удобный, но весьма не экономичный для памяти прием. Если уж так, то я бы посоветовал (если уж не в бинарке) хотя бы хранить два знака в одном байте. Известно, что число в диапазоне 0..9 с легкостью укладывается в 4 бита. Отсюда и предложение. 9=$9. Мы экономим память уже в 2 раза! -------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
| Shmity |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
BaD_SeCt0R, сложность программы заключаеться не в хранении(сколько места и как), а в скорости работы проги в целом(желательно не более минуты общее время работы проги), так что мне пойдут любые варианты. Да и операции у Gershkovich, будет чуть попроще реализовать. А еще такой вопрос уже ко всем: можно ли хранить и производить операции с такими громадными числами если выделить для них память c помощью getmem? И как потом с ними производить операции(если можно хранить, желательно хоть на каком нибудь малюсеньком примере, а то пробывал так делать делфи выдает ошибку постоянно)?
|
|||
|
||||
| hihi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 6.8.2007 Репутация: нет Всего: нет |
ребята, извините за офтоп, просто сккажите, изнываю от любопытсва, для каких задач это требуется?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Shmity, зачем нужен GetMem? SetLength() меняет размер динамического массива и выделяет столько памяти сколько нужно.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: 1 Всего: 3 |
На этом основана вся современная криптография. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ну не сказал бы что там нужны настолько большие числа, обычно кодирование идет блочно. Если ключ даже 1024 бита, то это примерно 300 знаков, ну пусть даже 500 знаков нужно, но 50000. 50000 это ж на 2 порядка больше. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: 1 Всего: 3 |
Для формирования ключа нужно вычислять очень большие простые числа (в PGP например). |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |