it-swarm.com.de

JS wie man den größten gemeinsamen Teiler findet

Ich möchte den größten gemeinsamen Teiler mit JavaScript finden.

Hat das schon mal jemand gemacht und ist bereit zu teilen?

36
bboy

Hier ist eine rekursive Lösung.

var gcd = function(a, b) {
    if ( ! b) {
        return a;
    }

    return gcd(b, a % b);
};

Unser Grundfall ist, wenn b gleich 0 Ist. In diesem Fall geben wir a zurück.

Wenn wir wiederkehren, tauschen wir die Eingabeargumente aus, übergeben aber den Rest von a / b Als zweites Argument.

76
alex

Entnommen aus Wikipedia.

Rekursiv:

function gcd_rec(a, b) {
    if (b) {
        return gcd_rec(b, a % b);
    } else {
        return Math.abs(a);
    }
}

Iterativ:

function gcd(a,b) {
    a = Math.abs(a);
    b = Math.abs(b);
    if (b > a) {var temp = a; a = b; b = temp;}
    while (true) {
        if (b == 0) return a;
        a %= b;
        if (a == 0) return b;
        b %= a;
    }
}
  • BEARBEITET pro Kommentar des Benutzers
22
Yannis
function egcd(a, b) {
    if (a == 0)
        return b;

    while (b != 0) {
        if (a > b)
            a = a - b;
        else
            b = b - a;
    }

    return a;
}
9
Amani