История
Версия для печати

Архив форума

Den Raskovalov 29.04.2004 23:03
Возникла у меня необходимость реализовать RSA ;) Неожиданно поймал себя на мысли, что толком не умею писать деление длинного числа на длинное. Непорядок. В качестве отправной точки написал бинарный поиск :wink: Ничего, работает 8) Почитал что-то в и-нете. То, что я смог найти и понять, весьма криво. Поэтому предлагаю обсудить, кто как пишет это самое деление? ;) В качестве представление длинный чисел предлагаю представление по основанию, скажем, 2^15 ;)
CBigInteger& operator/=(const CBigInteger& value)
{
if ( (m_sign == bisPositive) && (value.m_sign == bisPositive) )
{
if (value != Zero())
{
CBigInteger l = 0;
CBigInteger r = *this;
while (r - l > One())
{
CBigInteger mid = (l + r).SDiv(2);
if (mid*value <= *this)
l = mid;
else
r = mid;
}
while (l*value <= *this)
++l;
--l;
*this = l;
}
else
throw CAuxException("CBigInteger::operator/= Деление на 0");
}
else
{
*this = Abs() / value.Abs();
if (m_sign == value.m_sign)
m_sign = bisPositive;
else
m_sign = bisNegative;
}
return *this;
}
PS Сейчас Кнута с полки возьму. Редчайший случай :lol:
PPS Вообще у меня готов неплохой классик CBigInteger (все кроме деления в нем классно ;), если кому интересно, могу выслать. Если интересно многим, можно запостить в форум, обсудить. Я за OpenSource ;)
Илья Тетерин 01.05.2004 18:55
а где это в RSA деление бигнама на бигнам?
Den Raskovalov 01.05.2004 19:14
Илья Тетерин:
а где это в RSA деление бигнама на бигнам?
Остаток надо брать? Надо...
Илья Тетерин 01.05.2004 19:33
Den Raskovalov:
Илья Тетерин:
а где это в RSA деление бигнама на бигнам?
Остаток надо брать? Надо...
:oops: вспомнил, где там деление бигнамов было... три года назад писал. так, чего-то я гоню сильно сегодня :) так что к написанному ниже относиться с осторожностью...

обычное деление столбиком не пойдет? если искать результат побитово, то противная операция умножения не нужна (т.к. умножать только на 0 и 1), и получается линейный алгоритм. вроде бы так и делал.
он же 02.05.2004 13:29
остаток, кстати, тоже сразу получится, без квадратной операции умножения. наверное, поэтому и забыл про деление бигнамов, что у меня деления как раз не было, был только остаток от.
boris 06.05.2004 09:07
Неплохо бы выложить класс бигнамбер, просто обычно наибольшее внимание уделяется умножению, а не делению.
евгения 02.11.2004 17:36
там во втором сообщении было предложение выслать
так вот я желаю
рассмотреть ваш метод
плиз вышлитие janny_vovk_17@mail333.com
Гость 11.11.2004 17:04
Ой. А разве для взятия остатка надо уметь делить? Вроде это более простая задача.