Skip to content

Liczby zaprzyjaźnione

Dzisiaj pragnę zająć się ciekawym tematem liczb zaprzyjaźnionych. Ciekawa jest historia tego tematu, chętni mogą zapewne zerknąć do Wikipedii lub innych źródeł, np. https://pl.wikipedia.org/wiki/Liczby_zaprzyjaźnione . Oczywiście jest to zadanie z „podręcznika” – więc macie dużą szansę zobaczyć je. I dlatego też się tym zająłem.

Najpierw samo zadanie:

Liczby zaprzyjaźnione to para różnych liczb całkowitych dodatnich takich, że suma
dzielników właściwych każdej z tych liczb równa się drugiej liczbie. Pierwszą parę
takich liczb podał Pitagoras – to 220 i 284.
220 = 1+2+4+71+142 (dzielniki 284)
284 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 (dzielniki 220)
Zdefiniuj funkcję logiczną zaprzy(a, b) , która w wyniku wyświetli True , jeśli para
liczb a i b podanych jako parametry będzie zaprzyjaźniona, lub False – jeśli nie będzie.

Ponieważ sam kod jest dosyć obszerny, więc podam go na samym końcu, a teraz będę chciał opisać mój tok rozumowania i dojścia do rozwiązania problemu. Oczywiście, jak znam życie, Wasi uczniowie lub Wy sami możecie zapewne znaleźć inny sposób i inny algorytm – nic w tym złego, a wrzęcz będę sie cieszył, jeśli ktoś zrobi to inaczej.

Przede wszystkim musimy mieć dzielniki obu liczb – do tego celu zbudowałem funkcję dzielniki(liczba): tu przede wszystkim sprawdzam, czy aby podana liczba nie jest zerem, bo wówczas dosyć trudno mówić o dzielnikach – więc w takim wypadku zwracam None (czili nic). Następnie (liczba >0) tworzę zmienną (obiekt) o nazwie lista – na początku pusta lista. I teraz najważniejsza część tej funkcji – pętla for, w której inkrementuję element i funkcją range() /prosze zauważyć, że range jest od 1 do liczba-1 (zatem nie badamy tu liczby jako dzielnika samej przez siebie. W pętli mamy jedną instrukcję warunkową, która bada, czy dzielenie modulo daje wynik całkowity, i jeśli tak, to taki element i dodaje do listy za pomoca metody append(). Na końcu zwracana jest taka lista.

Następnie zdefiniowałem funkcję suma_dzielników(lista), której zadaniem jest proste dodanie każdego elementu listy i zwrócenie liczby całkowitej – tu własciewie nie ma co się rozpisywać, mamy prosty przykład pętli for, a na końcu zwracamy sumowaną wartość.

I na końcu funkcja zaprzy(a,b), która korzysta z tych dwóch dodatkowych funkcji, rozkłada podane liczby na dzielniki, sumuje je, a potem za pomocą jednej instrukcji warunkowej sprawdza, czy zależności opisane przez Pitagorasa są spełnione, i jeśli tak, wypisuje stosowny komunikat na ekranie, oraz dodatkowo zwraca wartość True. Dlaczego tak? Odsyłam do zadania – tam jest zapisane, aby funkcja wyświetliła True lub False. Więc potrzebny nam jest kod, który to zrealizuje – ów możecie zobaczyć w linijkach od 67 do 69 – zwróćcie uwagę, że mamy tu dwa sposoby wywołania: w linii 67 obliczamy wynik, a w linii 68 wypisujemy go na ekranie, oraz drugi sposób, w linii 69 – tu wprost funkcja zaprzy() jest parametrem funkcji print() – tak też można.

Tutaj krótkie zdjęcie Mu-Editor, a następnie kod źródłowy w serwisie GitHub. Mam nadzieję, że ten artykuł pomoże Wam w pracy z Pythonem.

A jeśli chcesz pogłębić swoją wiedzę – zapraszam na moje specjalne szkolenie ON-LINE dedykowane dla nauczycieli – za nieduże pieniądze.

Published inPrzykłady zadańPython 3Założone przykłady

Be First to Comment

Dodaj komentarz