Inverse Modulo
by wio_dude
HTML
<textarea id="output" rows="30" cols="40"></textarea>
JavaScript
var output = document.getElementById('output');
function Sum() {
this.terms = {};
}
Sum.prototype.copy = function() {
var that = new Sum();
for (x in this.terms) {
that.terms[x] = this.terms[x];
}
return that;
}
Sum.prototype.setFactor = function (factor, multiple) {
this.terms[factor] = multiple;
};
Sum.prototype.getFactor = function (factor) {
return this.terms[factor];
};
Sum.prototype.removeFactor = function (factor) {
delete this.terms[factor];
};
Sum.prototype.hasFactor = function (factor) {
return this.terms.hasOwnProperty(factor);
};
Sum.prototype.multiply = function (multiple) {
for (var factor in this.terms) {
if (this.terms.hasOwnProperty(factor)) {
this.terms[factor] *= multiple;
}
}
return this;
};
Sum.prototype.add = function (that) {
for (var factor in that.terms) {
if (that.hasFactor(factor)) {
var multiple = that.terms[factor];
if (this.hasFactor(factor)) {
this.terms[factor] += multiple;
} else {
this.terms[factor] = multiple;
}
}
}
return this;
};
Sum.prototype.substitute = function (factor, sum) {
if (this.hasFactor(factor)) {
var multiple = this.terms[factor];
this.removeFactor(factor);
sum = sum.copy().multiply(multiple);
this.add(sum);
}
return this;
};
Sum.prototype.toString = function () {
var terms = [];
for (var factor in this.terms) {
if (this.hasFactor(factor)) {
terms.push(this.terms[factor] + 'x' + factor);
}
}
return terms.join(' + ');
};
Sum.prototype.toJSON = Sum.prototype.toString;
function calculateInverseModulo(multiple, modulo) {
var equations = {};
var remainders = [];
var dividend = modulo;
var divisor = multiple;
while (divisor != 1) {
var remainder = dividend % divisor;
var quotient = Math.floor(dividend /...