Wszystkie dzielniki¶
Opis problemu¶
Implementation¶
Description¶
Funkcja divisors przyjmuje jeden argument: liczbę n, dla której chcemy znaleźć dzielniki.
- Znalezienie dzielników: w pierwszej części funkcji, generowana jest lista dzielników
nod 1 do pierwiastka kwadratowego zn. Używane jest tutaj wyrażenie list składanych, które sprawdza, czyndzieli się przezxbez reszty (n `mod` x == 0). - Komplementarne dzielniki: w drugiej części, funkcja znajduje dzielniki
nbędące wynikiem dzielenianprzezxw odwrotnym zakresie, od pierwiastka kwadratowego zndo 1. Dodatkowo, warunek(n `div` x /= x)zapobiega powtórzeniom, gdynjest kwadratem jakiejś liczby naturalnej. - Połączenie wyników: wyniki obu części są łączone za pomocą operatora
++, tworząc pełną listę dzielnikówn.
Kluczowym aspektem tej funkcji jest jej optymalizacja. Poprzez ograniczenie wyszukiwania do pierwiastka kwadratowego liczby n, znacznie redukuje się ilość wymaganych obliczeń. Jest to standardowa technika w algorytmach związanych z dzielnikami, która znacząco zwiększa ich wydajność.
W części main programu, definiujemy liczbę n (w tym przykładzie 16) i używamy funkcji divisors, aby znaleźć jej dzielniki. Następnie lista dzielników jest wyświetlana.