Dzięki za porady. Zaimplementowałem przypadki z zerami.
Dodałem jeszcze linijkę kodu, która dzieli większą liczbę przez mniejszą. Jeśli reszta to 0, funkcja zwraca mniejszą liczbę. To też uniknięcie masy dzielenia.
Mam jeszcze wątpliwości do punktu 3. Jeśli wpisze liczby 50 i 15, gdzie nwd to 5, otrzymuje wynik 1. To dlatego, że sqrt(15) = 3,8 = 3. Pętla nigdy nie dotrze do 5 - przynajmniej nie w tym przypadku. Robiąc to moim sposobem uzyskałem poprawny wynik.
@EDIT
Rozwiązałem problem. Zrobiłem pętlę która zaczyna w i=a/2 (czyli mniejsza liczba dzielona na 2) i kończy na 1. Przy pierwszym przypadku gdzie obie reszty to 0, dałem break.