function multiplyMod($x, $y) { /* x = this.modulo(x); y = this.modulo(y); */ $xy = biMultiply($x, $y); return $this->modulo($xy); }
function biPow($x, $y) { global $biRadixBase, $biRadixBits, $biBitsPerDigit, $biRadix, $biHalfRadix, $biRadixSquared, $biMaxDigitVal, $biMaxInteger, $biMaxDigits, $biZERO_ARRAY, $biBigZero, $biBigOne, $dpl10, $lr10; $result = $biBigOne; $a = $x; while (true) { if (($y & 1) != 0) { $result = biMultiply($result, $a); } $y >>= 1; if ($y == 0) { break; } $a = biMultiply($a, $a); } return $result; }