1 | ||||||
BigInteger в степени BigInteger03.04.2014, 09:09. Показов 5069. Ответов 18
Метки нет (Все метки)
Имеются переменные y,r,s,p типа BigInteger. Необходимо вычислить (y^r*r^s) % p.
Какие предложения по поводу вычисления данной формулы? Вот мой вариант:
Возможно ли это выражение разбить на два и воспользоваться методом BigInteger.ModPow?
0
|
03.04.2014, 09:09 | |
Ответы с готовыми решениями:
18
Как делить одно число BigInteger на другое BigInteger, при чем не теряя остаток Бинарное возведение в степень числа типа BigInteger в степень Biginteger BigInteger Арифметике с BigInteger |
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|
03.04.2014, 10:55 | 2 |
magnum1992, y^r*r^s - скорее всего OutOfMemory
сколько разрядов в цифрах y, r и s?
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|
03.04.2014, 11:03 | 4 |
magnum1992, Огромные цифры лучше всего засунуть в stringи или в массивы и работать с ними так
string y="123"; r=3; y^r это y[2]+y[2]+y[2] ; y[1]+y[1]+y[1]; y[0]+y[0]+y[0]
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|||||||||||
03.04.2014, 11:31 | 6 | ||||||||||
поразрядно
string y="124"; r=3; y^r это y[2]+y[2]+y[2] ; y[1]+y[1]+y[1]; y[0]+y[0]+y[0] т.е. сначала складываем младший разряд
magnum1992, тупанул
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
03.04.2014, 13:37 | 7 |
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|
03.04.2014, 14:29 | 8 |
44 675 112 decimal digits * 2 байта в принципе не много около 100 метров памяти на 1 число
100 метров на первое число + 100 метров на второе число + 200 метров результат умножения + промежуточные массивы
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
||||||
03.04.2014, 14:42 | 10 | |||||
magnum1992, возведение в степень можно представить в виде операции умножения , операцию умножения можно представить как сложение
4^3 = 4*4*4 = ( 4+4+4+4 ) * 4 = т.д. поразрядно складывать в школе учат
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
03.04.2014, 14:52 | 11 |
немного это если его просто в памяти подержать, а рассчитать это уже не так все радужно.
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
03.04.2014, 15:02 | 12 |
magnum1992, y = {3027291} 3*106
r ={6893186} 6*106 y^r 36*106*1036000000 это явно выходит за рамки любого типа
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
||||||
03.04.2014, 15:07 | 14 | |||||
так же думаю , но самописную фигню хоть можно проконтролировать припилив прогресс бар и знать что она работает , а не висит
Тебе надо написать два метода 1. который посчитает 4^3 = 4*4*4 = ( 4+4+4+4 ) * 4 = ( 4+4+4+4 ) + ( 4+4+4+4 ) + ( 4+4+4+4 ) +( 4+4+4+4 ) столько тебе раз надо сложить твое основание в этом примере 16 раз надо сложить число 4 2. метод сложения строк
1
|
03.04.2014, 15:13 [ТС] | 15 |
Так объясню зачем мне это нужно. Я реализую Схему Эль Гамаля в режиме подписи и мне это вычисление необходимо при проверке подписи. На сколько я понял для нормальной криптостойкости используются числа от 1024 бита откуда вытекает вопрос как у них реализовано возведение большого числа в большое
Добавлено через 2 минуты Возможно ли как нибудь использовать метод BigInteger.ModPow для этой формулы?
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|
03.04.2014, 15:44 | 16 |
посмотри тут может подойдет
http://www.codeproject.com/Articles/36323/BigInt
0
|
813 / 421 / 169
Регистрация: 08.02.2013
Сообщений: 711
|
||||||
03.04.2014, 16:08 | 17 | |||||
Сообщение было отмечено magnum1992 как решение
Решение
magnum1992, а Вы пробовали очевидные формулы?
хотябы так:
EVG-1980, собственно, BigInteger и реализует длинную арифметику используя алгоритмы быстрого умножения, возведения в степень итд.. отличных от школьного умножения в столбик.
1
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|
03.04.2014, 16:16 | 18 |
magnum1992, код в студию щас до дома приеду проверю как твой код на i7 фурычит и виснет
0
|
03.04.2014, 16:53 [ТС] | 19 | |||||
rRczZZ, Спасибо все работает и очень быстро.
EVG-1980, И вам спасибо за помощь. Вот код если интересно:
подавал на вход 128 байтные числа зависи при вычислении не наблюдалось P.S. Core i5
0
|
03.04.2014, 16:53 | |
03.04.2014, 16:53 | |
Помогаю со студенческими работами здесь
19
BigInteger в Alea Вычислить Biginteger Генерация BigInteger Сокращение BigInteger BigInteger не умножает Структура BigInteger Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |