Opracowanie:
Liczby doskonałe
Liczby doskonałe
Liczba doskonała to liczba naturalna, która jest równa sumie wszystkich swoich dzielników, które są mniejsze od tej liczby.
Najbardziej znany przykład liczb doskonałych to 6.
Sprawdźmy, czy 6 faktycznie jest liczbą doskonałą.
Musimy znaleźć wszystkie dzielniki 6. Będą to: 1, 2, 3, 6. Z definicji liczby doskonałej wiemy, że musimy sumować wszystkie dzielniki, które są mniejsze niż ta liczba. Dlatego:
, czyli 6 jest liczbą doskonałą.
Przykład 1.
Sprawdź, czy 14 jest liczbą doskonałą.
Dzielniki liczby 14 to:
1, 2, 7, 14
10 nie jest równe 14, więc liczba 14 nie jest doskonała.
Algorytmy sprawdzania dzielników, liczb doskonałych czy sortowania to idealne wyzwanie dla programowania. Na potrzeby tego wypracowania napisałam kod w języku Python.
#Autor: xGumisieQ
for liczba in range(1,10000):
suma_dzielnikow = 0
pomoc = liczba / 2
dzielnik = 1
while dzielnik <= pomoc:
if liczba%dzielnik==0:
suma_dzielnikow = suma_dzielnikow + dzielnik
dzielnik = dzielnik + 1
if (liczba == suma_dzielnikow):
print(„Liczba: „+ str(liczba) + ” suma dzielników: ” + str(suma_dzielnikow))
Celem tego kodu jest wypisanie liczb doskonałych w zadanym zakresie.
Przeanalizuję kod, żeby wyjaśnić jego działanie.
Ważne!
Im większy zakres w for w range, tym czas wykonania się programu będzie dłuższy.
Nie trzeba wprowadzać zmiennej pomoc, która dzieli liczbę przez 2. Natomiast zmniejsza to ilość kroków w programie. Wtedy też trzeba zmienić warunek w while, żeby pętla nie dodawała największego dzielnika, czyli tej samej liczby, którą sprawdzamy.
Przykładowo dla liczby 14, program musiałby sprawdzić dzielniki: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13. Dzięki zmiennej pomocniczej, która dzieli liczbę przez 2, pętla sprawdza tylko: 1, 2, 3, 4, 5, 6, 7.
Działanie programu
Po uruchomieniu wyświetlone zostaną takie dane wyjściowe.
Czyli liczby 6, 28, 496 i dopiero 8128 są liczbami doskonałymi. Jeżeli chcielibyśmy na kartce poszukać liczb doskonałych większych niż 6 i 28, byłoby to niemal niemożliwe lub zajmowałoby mnóstwo czasu. Program w kilka sekund potrafi to wyliczyć.
Według różnych źródeł można przeczytać, że kolejną znaną liczbą jest dopiero 33550336. Zmodyfikowałam zakres.
Dalszych liczb doskonałych już nie sprawdzimy, ponieważ są one duże, większe niż zakres typu int, który jest przyjmowany w pętli for.
Powyższy kod można uruchomić w dowolnym kompilatorze pythona online. Należy pamiętać o odpowiednich wcięciach, ponieważ ten język jest bardzo na nie czuły. Jedno wcięcie może zupełnie zmienić wynik programu.