Wykonujemy ćwiczenie, które w zasadzie jest wprowadzeniem do innego ćwiczenia. Wyliczamy drugi co do wielkości dzielnik danej liczby.

Ok, liczba jest podzielna przez n gdy:

  • liczba mod n daje 0

Każda liczba jest podzielna minimum przez:

  • 1
  • samą siebie

Liczby większe od 1, które mają 2 dzielniki, 1 i samą siebie nazywamy pierwszymi (1 ma 1 dzielnik, choć te kryteria spełnia).

Ok, jakie są dzielniki 100?

1, 2, 4, 5, 10, 20, 25, 50, 100

Jakie są dzielniki 20?

1, 2, 4, 5, 10, 20

Jakie są dzielniki 3?

1, 3

Nam chodzi o drugi co do wielkości dzielnik liczby.

Na logikę – dzielnik danej liczby musi być od niej mniejszy (nie licząc jej samej)…

Ok:

function secondLargestDivisorBruteForce(num){

    let cnt = num - 1;

    while(cnt > 1){
        if(num % cnt === 0)
            return cnt;
        cnt--;
    }
    
    return 1;
}

console.log(secondLargestDivisorBruteForce(100));
//50
console.log(secondLargestDivisorBruteForce(20));
//10
console.log(secondLargestDivisorBruteForce(3));
//1

Czyli odejmujemy i sprawdzamy, czy num jest podzielne przez 99, 98, 97… w końcu na 50 trafimy.

Brakuje jakiegoś sprawdzenia, czy liczba nie jest 1 i wtedy -1 zwracamy, bo 1 ma 1 dzielnik, ale to tylko wprowadzenie do następnego ćwiczenia, które jest wprowadzeniem do następnego algorytmu…