Dane są dwie liczby naturalne. Znajdź ich wszystkie dzielniki i wypisz. Podczas pisania algorytmu należy wykorzystać swoją wiedzę dotyczącą wyszukiwania dzielników jak również podzielności liczb.
Przykładowo dla liczb 15 i 60 mamy 3 wspólne dzielniki: 1, 3, 5 oraz 15. W tym przypadku druga liczba to wielokrotność pierwszej, więc wspólnymi dzielnikami są wszystkie liczby mniejszej liczby.
Innym przykładem jest para liczb 15 i 33. W tym przypadku jedyni wspólnymi dzielnikami są 1 oraz 3. Wynika to z faktu, że 15 = 5·3·1, a 33 = 11·3·1.
Proste rozwiązanie polega na wybraniu mniejszej liczby, a następnie przejrzeniu wszystkich liczb od 1 do mniejszej liczby włącznie. Takie rozwiązanie daje z 100% pewnością dobry wynik, ale nie jest optymalne, ponieważ sprawdza wszystkie możliwe rozwiązania. Oto przykładowy kod:
Wyszukiwanie dzielników polega na wybraniu każdej kolejnej liczby z zakresu, a następnie sprawdzeniu czy dzieli obydwie liczby. Po znalezieniu wartości zostaje ona dopisana na koniec listy wynikowej.
Proste rozwiązanie nie optymalizuje w żaden sposób procesu wykrywania dzielników. Po pierwsze należy zauważyć, że iloczyn wszystkich dzielników to Największy Wspólny Dzielnik (NWD) obydwu liczb. Innymi słowy wystarczy znaleźć dzielniki NWD(a, b). Drugą istotną sprawą jest optymalizacja procesu szukania dzielników. Wykorzystując obydwa algorytmy uzyska się optymalny kod.
Oto przykładowy kod funkcji DzielnikiLiczb(), który dla dwóch podanych liczb zwróci wszystkie ich wspólne dzielniki.
Dzięki wykorzystaniu gotowych funkcji kod znacznie się upraszcza.
W celu przetestowania kodu można skorzystać z poniższego fragmentu programu, który wczytuje dwie liczby, a następnie wypisuje wszystkie ich wspólne dzielniki.
Napisz algorytm, który zwróci wspólne dzielniki dla dowolnej ilości liczb. Przykładowo dla liczb 15, 33 i 60 wynikiem jest 1 i 3.