Модульное возведение в степень с большими числами - PullRequest
0 голосов
/ 05 мая 2019

Следующий код медленный:

(define base 2945795152904547855448158643091235482997756069461486099501216307557115896772)
(define prime 115792089237316195423570985008687907852837564279074904382605163141518161494337)

(modulo (expt base (- prime 2)) prime)

Есть ли способ сделать это быстрее?

Например, в Python есть встроенная функция pow, которая может быстро это вычислить.

1 Ответ

4 голосов
/ 05 мая 2019

Rosetta Code имеет реализацию Racket .

Используется modular-expt из math.

Документация

Примеры:

> (modulo (expt -6 523) 19)
13
> (modular-expt -6 523 19)
13
> (modular-expt 9 158235208 19)
4
...