UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

40 lines (28 loc) 773 B
"use strict"; /* Function: pow(base,exp,modulo) */ var validate = require("../validation/non-negative-integer"); function pow(base, exp) { var modulo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.MAX_SAFE_INTEGER; var result = 1; base = base % modulo; while (exp > 0) { if (exp % 2 == 1) { result = result * base % modulo; } exp = exp / 2 | 0; base = base * base % modulo; } return result; } module.exports = function (base, exp, modulo) { validate(base, "pow"); validate(exp, "pow"); if (typeof modulo === "undefined") { return pow(base, exp); } else { validate(modulo, "pow"); return pow(base, exp, modulo); } };