mathball
Version:
A JavaScript library for Competitive Programming
40 lines (28 loc) • 773 B
JavaScript
;
/*
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);
}
};