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 /...