Piszemy program, który znajduje najwyższy wspólny dzielnik dwóch liczb. Na razie metoda brute force, lepsze podejście w następnej lekcji.

Ok, pomyślmy – mamy 2 liczby. Jaki będzie najwyższy wspólny dzielnik?

Cóż, na pewno nie będzie większy od mniejszej liczby. Czyli jak mamy 6 i 16 to na pewno nie będzie większy niż 6 (mniejsza liczba).

Ok, a czy może być równy mniejszej liczbie?

Może. Np. 2 i 4 (2). Albo 5 i 125.

Krótko mówiąc bierzemy minimum z obu liczb i sprawdzamy czy liczba x i y jest podzielna przez tę mniejszą. Jak nie to zmniejszamy.

Koniec końców któraś będzie dzielnikiem a jak nie to będą chociaż podzielne przez 1.

Oto kod:

function gcdBruteForce(x, y){

    let smallerOne = Math.min(x, y);

    while(smallerOne > 1){
        if(x % smallerOne === 0 && y % smallerOne === 0)
            return smallerOne;

        smallerOne--;
    }

    return 1;
}

console.log(gcdBruteForce(5,125)); //5
console.log(gcdBruteForce(25,125)); //25
console.log(gcdBruteForce(6,16)); //2
console.log(gcdBruteForce(8, 30)); //2

Zawsze bierze tę mniejszą i sprawdza, czy obie są podzielne przez nią. Jak nie to zmniejsza o 1 i dalej sprawdza, aż znajdzie. Jak nie znajdzie to obie i tak są przez 1 podzielne.