BigInteger modPow с показателем BigDecimal - PullRequest
0 голосов
/ 30 мая 2020

Мне нужно вычисление BigInteger modPow, но с BigDecimal в качестве экспоненты.

Преобразование в double или использование BigDecimal.pow, а затем мод, в этом случае невозможно, так как полный результат без мода в память не поместится. (и double не хватает точности) Так что о преобразовании в BigInteger с правильным масштабом тоже не может быть и речи.

Я не нашел для этого никакой библиотеки или подобного. modPow с дробным показателем без предварительного вычисления полного возведения в степень?

РЕДАКТИРОВАТЬ: Пример

BigInteger base = BigInteger.valueOf("101");
BigDecimal exp = BigDecimal.valueOf("24.387207613444534);
BigInteger mod = BigInteger.valueOf("10403");

BigInteger result = base.modPow(exp, mod)

Эти номера образцов очень малы, предполагаемое использование требует гораздо больших. Предполагается, что он предоставляет модификацию числа, которое само по себе слишком велико для хранения в ОЗУ, но известно о журнале и целочисленном делителе.

1 Ответ

0 голосов
/ 02 июня 2020

Так что я тем временем нашел способ. base ^ (floor (exp - 1)) как обычный modPow, умноженный на base ^ (1+ (exp - floor (exp))) Затем floor и mod. Последнее возведение в степень с коэффициентом 1.x все еще достаточно мало, чтобы поместиться в RAM.

...