R1EmPIK8PbWl1
Zdjęcie przedstawia rozsypany stos wyciętych cyfr.

I_P_W14_M04_Java Własności liczb

Źródło: Pixabay, domena publiczna.

Liczby doskonałe

Kolejną ciekawą grupą liczb są liczby doskonałe. Wyróżniająca je właściwość również dotyczy dzielników.

Aby daną liczbę naturalną można było nazwać doskonałą, suma jej dzielników właściwych musi być równa tej liczbie. Przykładami takich liczb są:

  • 6,

  • 28,

  • 496,

  • 8128.

Przyjrzyjmy się zatem dokładnie liczbie 6:

  • dzielniki właściwe: 1, 2, 3.

  • suma dzielników właściwych: 1 + 2 + 3 = 6.

  • Czy jest to liczba doskonała? TAK

Podobnie sprawdzimy liczbę 28:

  • dzielniki właściwe: 1, 2, 4, 7, 14.

  • suma dzielników właściwych: 1 + 2 + 4 + 7 + 14 = 28.

  • Czy jest to liczba doskonała? TAK

Problem 1

Napiszmy teraz algorytm w postaci pseudokodu, który sprawdzi, czy dana liczba jest liczbą doskonałą.

Specyfikacja:

Dane:

  • liczba – liczba do sprawdzenia; liczba naturalna

Wynik:

Program wypisuje komunikat Liczba jest liczbą doskonałą lub Liczba nie jest liczbą doskonałą.

Zapisany za pomocą pseudokodu algorytm sprawdzający, czy dana liczba jest liczbą doskonałą, będzie wyglądał następująco:

Linia 1. liczba ← wprowadź liczbę naturalną. Linia 2. sumaDzielników ← 0. Linia 4. dla i znak równości 1 przecinek 2 przecinek 3 przecinek kropka kropka kropka przecinek liczba minus 1 wykonuj dwukropek. Linia 5. jeżeli liczba mod i znak równości 0 dwukropek. Linia 6. sumaDzielników ← sumaDzielników plus i. Linia 8. jeżeli sumaDzielników znak równości liczba wykonaj dwukropek. Linia 9. wypisz cudzysłów Liczba jest liczbą doskonałą cudzysłów. Linia 10. w przeciwnym razie dwukropek. Linia 11. wypisz cudzysłów Liczba nie jest liczbą doskonałą cudzysłów.

Pierwszym krokiem jest wprowadzenie liczby, którą chcemy sprawdzić, i zapisanie jej wartości w zmiennej liczba. Następnie zostaje zadeklarowana zmienna sumaDzielników. Zmienna, jak wskazuje jej nazwa, będzie służyła do sumowania dzielników właściwych zadanej liczby.

Następnie zostaje zadeklarowana pętla, która iteruje po liczbach z przedziału 1 , liczba 1 , sprawdzając, czy dana wartość i jest dzielnikiem sprawdzanej liczby. Jeżeli tak, to następuje modyfikacja wartości zmiennej sumaDzielników. Wartość sumaDzielników zostaje zwiększona o wykryty dzielnik.

Ostatnim krokiem jest sprawdzenie, czy sumaDzielników jest równa sprawdzanej liczbie. Jeśli tak, oznacza to, że liczba ta jest liczbą doskonałą.

Kod programu w języku Java wygląda następująco:

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class LiczbaDoskonala otwórz nawias klamrowy. Linia 4. otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. int liczbaTest znak równości 0 średnik. Linia 6. int sumaDzielnikow znak równości 0 średnik. Linia 8. Scanner sc znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 9. System kropka out kropka println otwórz nawias okrągły cudzysłów Podaj liczbę do sprawdzenia cudzysłów zamknij nawias okrągły średnik. Linia 10. liczbaTest znak równości sc kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 12. for otwórz nawias okrągły int i znak równości 1 średnik i ampersant lt średnik liczbaTest średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. if otwórz nawias okrągły liczbaTest procent i znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. sumaDzielnikow plus znak równości i średnik. Linia 15. zamknij nawias klamrowy. Linia 17. if otwórz nawias okrągły sumaDzielnikow ampersant gt średnik liczbaTest zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. break średnik. Linia 19. zamknij nawias klamrowy. Linia 20. zamknij nawias klamrowy. Linia 22. if otwórz nawias okrągły sumaDzielnikow wykrzyknik znak równości liczbaTest zamknij nawias okrągły otwórz nawias klamrowy. Linia 23. System kropka out kropka println otwórz nawias okrągły cudzysłów Liczba cudzysłów plus liczbaTest plus cudzysłów nie jest liczbą doskonałą cudzysłów zamknij nawias okrągły średnik. Linia 24. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 25. System kropka out kropka println otwórz nawias okrągły cudzysłów Liczba cudzysłów plus liczbaTest plus cudzysłów jest liczbą doskonałą cudzysłów zamknij nawias okrągły średnik. Linia 26. zamknij nawias klamrowy. Linia 27. zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny. Linia 29. zamknij nawias klamrowy.