Implementacja algorytmu w języku Java

Napiszmy program w języku Java, który zrealizuje algorytm rozkładu liczby na czynniki pierwsze. Program będzie rozszerzał kod zaprezentowany w filmie, w sekcji „Film samouczek”. Dodamy funkcję czytelnego wypisania działania, przedstawiając rozkładaną liczbę, symbol równości oraz kolejne dzielniki pierwsze, rozdzielone symbolem gwiazdki (symbol mnożenia).

  1. Tworzymy pustą klasę Main i metodę startową main().

Linia 1. public class Main otwórz nawias klamrowy. Linia 2. 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 4. zamknij nawias klamrowy. Linia 5. zamknij nawias klamrowy.
  1. Definiujemy trzy zmienne przechowujące potrzebne dane:

  • n – przechowuje aktualną wartość rozkładanej liczby (pobieramy ją od użytkownika za pomocą obiektu input klasy Scanner – niezbędne będzie zaimportowanie java.util.Scanner); typ int,

  • k – przechowuje aktualną wartość liczby, przez którą dzielimy rozkładaną liczbę; typ int,

  • wynik – przechowuje wartość wynikowego napisu, który zostanie wyświetlony po zakończeniu algorytmu; typ String.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Main otwórz nawias klamrowy. Linia 4. 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. Scanner input znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 7. int n znak równości input kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. int k znak równości 2 średnik. Linia 9. String wynik znak równości n plus cudzysłów znak równości cudzysłów średnik. Linia 10. zamknij nawias klamrowy. Linia 11. zamknij nawias klamrowy.
  1. Tworzymy pętlę while, która będzie wykonywana, dopóki wartość rozkładanej liczby n nie wyniesie 1.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Main otwórz nawias klamrowy. Linia 4. 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. Scanner input znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 7. int n znak równości input kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. int k znak równości 2 średnik. Linia 9. String wynik znak równości n plus cudzysłów znak równości cudzysłów średnik. Linia 11. while otwórz nawias okrągły n zamknij nawias ostrokątny 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. zamknij nawias klamrowy. Linia 14. zamknij nawias klamrowy. Linia 15. zamknij nawias klamrowy.
  1. Wewnątrz pierwszej pętli while definiujemy kolejną pętlę, odpowiedzialną za sprawdzenie warunku podzielności. Pętla ta będzie wykonywana, dopóki wartość zmiennej n będzie podzielna przez aktualną wartość zmiennej k. W wewnętrznej pętli do wynikowego napisu (zmienna wynik) dodajemy wartość zmiennej k oraz nadajemy zmiennej n wartość równą wartości ilorazu zmiennych n oraz k.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Main otwórz nawias klamrowy. Linia 4. 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. Scanner input znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 7. int n znak równości input kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. int k znak równości 2 średnik. Linia 9. String wynik znak równości n plus cudzysłów znak równości cudzysłów średnik. Linia 11. while otwórz nawias okrągły n zamknij nawias ostrokątny 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. while otwórz nawias okrągły n procent k znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. wynik plus znak równości k plus cudzysłów asterysk cudzysłów średnik. Linia 15. n prawy ukośnik znak równości k średnik. Linia 16. zamknij nawias klamrowy. Linia 18. k plus plus średnik. Linia 19. zamknij nawias klamrowy. Linia 20. zamknij nawias klamrowy. Linia 21. zamknij nawias klamrowy.
  1. W ostatnim kroku dodajemy komendę wypisującą otrzymany wynik na ekranie.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Main otwórz nawias klamrowy. Linia 4. 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. Scanner input znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 7. int n znak równości input kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. int k znak równości 2 średnik. Linia 9. String wynik znak równości n plus cudzysłów znak równości cudzysłów średnik. Linia 11. while otwórz nawias okrągły n zamknij nawias ostrokątny 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. while otwórz nawias okrągły n procent k znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. wynik plus znak równości k plus cudzysłów asterysk cudzysłów średnik. Linia 15. n prawy ukośnik znak równości k średnik. Linia 16. zamknij nawias klamrowy. Linia 18. k plus plus średnik. Linia 19. zamknij nawias klamrowy. Linia 21. System kropka out kropka println otwórz nawias okrągły wynik zamknij nawias okrągły średnik. Linia 22. zamknij nawias klamrowy. Linia 23. zamknij nawias klamrowy.
  1. W wypadku tego algorytmu do napisu wynikowego dołączany jest na końcu operator mnożenia – ponieważ nie wygląda to dobrze, usuniemy go.

Użyjemy do tego klasy StringBuilder, która umożliwia wygodne modyfikowanie danego napisu. Za pomocą metody deleteCharAt() pozbywamy się znaku mnożenia, a metodą trim() usuwamy wszelkie niepotrzebne spacje znajdujące się na końcu napisu.

Ważne!

Klasę StringBuilder poznasz podczas omawiania operacji na łańcuchach znaków w języku Java.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Main otwórz nawias klamrowy. Linia 4. 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. Scanner input znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 7. int n znak równości input kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. int k znak równości 2 średnik. Linia 9. String wynik znak równości n plus cudzysłów znak równości cudzysłów średnik. Linia 11. while otwórz nawias okrągły n zamknij nawias ostrokątny 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. while otwórz nawias okrągły n procent k znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. wynik plus znak równości k plus cudzysłów asterysk cudzysłów średnik. Linia 15. n prawy ukośnik znak równości k średnik. Linia 16. zamknij nawias klamrowy. Linia 18. k plus plus średnik. Linia 19. zamknij nawias klamrowy. Linia 21. StringBuilder modyfikator znak równości new StringBuilder otwórz nawias okrągły wynik zamknij nawias okrągły średnik. Linia 23. modyfikator kropka deleteCharAt otwórz nawias okrągły modyfikator kropka length otwórz nawias okrągły zamknij nawias okrągły minus 2 zamknij nawias okrągły średnik. Linia 24. wynik znak równości modyfikator kropka toString otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 25. wynik znak równości wynik kropka trim otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 27. System kropka out kropka println otwórz nawias okrągły wynik zamknij nawias okrągły średnik. Linia 28. zamknij nawias klamrowy. Linia 29. zamknij nawias klamrowy.

Załóżmy, że wartością podaną przez użytkownika jest liczba całkowita 63.

Wynikiem tego algorytmu, przy podanej wartości, jest napis:

Linia 1. 63 znak równości 3 asterysk 3 asterysk 7.

Słownik

liczba pierwsza
liczba pierwsza

liczba naturalna większa od 1, mająca tylko dwa dzielniki: 1 oraz samą siebie (przykładowo: 2, 3, 5, 7, 11)