Сейчас на форуме: tyns777, zds (+3 невидимых)

 eXeL@B —› Программирование —› (a*b) mod c - длинные числа
Посл.ответ Сообщение

Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 28 октября 2009 12:03
· Личное сообщение · #1

Пытаюсь придумать, как бы попроще реализовать умножение двух беззнаковых 128-битных чисел, представленных как-нибудь так:
Code:
  1. typedef unsigned __int64 U64;
  2. union LU64{
  3.          struct{
  4.                  UINT lolo;
  5.                  UINT lohi;
  6.                  UINT hilo;
  7.                  UINT hihi;
  8.          };
  9.          struct{
  10.                  U64 Low;
  11.                  U64 High;
  12.          };
  13. };
  14. class bignum{
  15.          //operators;
  16.          LU64 N;
  17. }

по модулю третьего такого же. Как можно это сделать наименее громоздко? Или имеет смысл хранить число как-то иначе?
(сложение и вычитание есть)



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 28 октября 2009 12:13
· Личное сообщение · #2

Умножение столбиком. Остаток от деления на сайте зомбы в статье про рса.

-----
Shalom ebanats!




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 28 октября 2009 12:23
· Личное сообщение · #3

Используй gmp или mpir библиотеки, сэкономишь много времени



Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 28 октября 2009 12:27 · Поправил: vptrlx
· Личное сообщение · #4

>>Умножение столбиком
В умножении столбиком придётся вылезти из 128бит, что меня не очень радует.
//и тут уже Кнута стоит читать, если читать. БПХ, 3 в 2 - так, кажется, они называются?

>>Используй gmp или mpir библиотеки
К сожалению, нужно что-нибудь компактненькое.


add: сейчас вопрос уже просто теоретический



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 30 октября 2009 13:04
· Личное сообщение · #5

На wasm.ru недавно похожую тему обсудали.


 eXeL@B —› Программирование —› (a*b) mod c - длинные числа
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати