Если вы планируете написать свою собственную версию Modpow()
:
Вам нужна только мощность по модулю q, поэтому в ваших вычислениях не нужно использовать любое число больше q^2
,используя тот факт, что:
if a = b (mod q) then a*p = b*p (mod q)
Поэтому при расчете мощности n^p
после каждого умножения выполняйте (по модулю q) операцию с вашей рабочей переменной.
Кроме того, если q простое, вы можете использовать небольшую теорему Ферма, которая гласит:
a^(q-1) = 1 (mod q)
(when a is not a multiple of q)
Это может быть использовано для сокращения вычислений, когда p
равно (намного) больше чем q