Realizacja algorytmu w języku w C++

Napiszemy w języku C++ program rozkładający liczbę naturalną na czynniki pierwsze.

Specyfikacja problemu:

Dane:

  • liczba – liczba do rozłożenia na czynniki pierwsze; liczba naturalna większa od 1

Wynik:

Program wypisuje wszystkie czynniki pierwsze liczby liczba w jednym wierszu, po przecinku.

Zaczniemy od zdefiniowania zmiennej typu int. Użyjemy jej do przechowania wartości liczby rozkładanej na czynniki.

Linia 1. int liczba znak równości 24 średnik.

Następnie utworzymy pętlę for. Będzie ona działać aż do momentu, w którym zmienna liczba będzie równa 1. W pętli deklarujemy zmienną czynnik, która będzie oznaczała kolejne rozpatrywane przez nas potencjalne czynniki pierwsze. Będzie ona inkrementowana w każdej iteracji. Jej wartością początkową jest 2, ponieważ jest to najmniejsza liczba pierwsza.

Linia 1. for otwórz nawias okrągły int czynnik znak równości 2 średnik liczba zamknij nawias ostrokątny 1 średnik plus plus czynnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. zamknij nawias klamrowy.

Wewnątrz pętli for umieścimy pętlę while. Pętla while wykonuje się, dopóki reszta z dzielenia zmiennej liczba przez czynnik wynosi 0 (czyli dopóki zmienna czynnik jest podzielnikiem rozkładanej liczby).

Linia 1. for otwórz nawias okrągły int czynnik znak równości 2 średnik liczba zamknij nawias ostrokątny 1 średnik plus plus czynnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. while otwórz nawias okrągły liczba procent czynnik znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. cout otwórz nawias ostrokątny otwórz nawias ostrokątny czynnik otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów przecinek cudzysłów średnik. Linia 4. liczba prawy ukośnik znak równości czynnik średnik. Linia 5. zamknij nawias klamrowy. Linia 6. zamknij nawias klamrowy.

Mamy zatem program, który rozłoży daną liczbę na czynniki pierwsze:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int liczba znak równości 24 średnik. Linia 8. for otwórz nawias okrągły int czynnik znak równości 2 średnik liczba zamknij nawias ostrokątny 1 średnik plus plus czynnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. while otwórz nawias okrągły liczba procent czynnik znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. cout otwórz nawias ostrokątny otwórz nawias ostrokątny czynnik otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów przecinek cudzysłów średnik. Linia 11. liczba prawy ukośnik znak równości czynnik średnik. Linia 12. zamknij nawias klamrowy. Linia 13. zamknij nawias klamrowy. Linia 14. zamknij nawias klamrowy.

Możemy jednak stworzyć bardziej optymalny algorytm. Zauważmy, że nie jest konieczne sprawdzanie wszystkich czynników, aż wartość liczba wyniesie 1.

Każda liczba złożona, ma maksymalnie jeden czynnik pierwszy większy od jej pierwiastka.

Przykład 1

Liczba 27, po rozkładzie na czynniki pierwsze, to 333. Żaden z czynników zatem nie jest większy od pierwiastka tej liczby, wynoszącego 5,196...

Przykład 2

Pierwiastek liczby 14 to 3,74..., a liczba ta po faktoryzacji to 27. Widzimy zatem, że tylko jeden czynnik pierwszy jest większy od jej pierwiastka.

W związku z tą obserwacją, możemy przerwać iterację w momencie, gdy czynnik podniesiony do kwadratu będzie większy od wartości liczba. Na końcu wypiszemy wartość zmiennej liczba, jeżeli jest ona większa od 1.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int liczba znak równości 24 średnik. Linia 8. for otwórz nawias okrągły int czynnik znak równości 2 średnik czynnik asterysk czynnik otwórz nawias ostrokątny znak równości liczba średnik plus plus czynnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. while otwórz nawias okrągły liczba procent czynnik znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. cout otwórz nawias ostrokątny otwórz nawias ostrokątny czynnik otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów przecinek cudzysłów średnik. Linia 11. liczba prawy ukośnik znak równości czynnik średnik. Linia 12. zamknij nawias klamrowy. Linia 13. zamknij nawias klamrowy. Linia 15. if otwórz nawias okrągły liczba wykrzyknik znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. cout otwórz nawias ostrokątny otwórz nawias ostrokątny liczba średnik. Linia 17. zamknij nawias klamrowy. Linia 18. zamknij nawias klamrowy.
Polecenie 1

Napisz program, który pobierze od użytkownika liczbę naturalną, a następnie wskaże rozkład podanej przez użytkownika liczby na czynniki pierwsze.

Specyfikacja problemu:

Dane:

  • n – liczba do rozłożenia na czynniki pierwsze; liczba naturalna większa od 1

Wynik:

Program wypisuje, na standardowe wyjście, wszystkie czynniki pierwsze liczby n oddzielone spacją.

R1apFvV7IMLGP
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Polecenie 2

Porównaj swoje rozwiązanie z zaprezentowanym w filmie.

R17ANmE6L093q
Film nawiązujący do rozkładu liczby na czynniki pierwsze.
R1a8XwRa8ekxK

Przycisk do pobrania pliku TXT z kodem źródłowym.

Plik TXT o rozmiarze 353.00 B w języku polskim
R1R2JUiZu0FgV

Przycisk do pobrania pliku TXT z kodem źródłowym.

Plik TXT o rozmiarze 476.00 B w języku polskim

Słownik

faktoryzacja
faktoryzacja

rozkład liczby na czynniki pierwsze, czyli zapisanie dowolnej liczby naturalnej większej od 1 za pomocą iloczynu liczb pierwszych

liczba pierwsza
liczba pierwsza

liczba naturalna większa od 1, która ma tylko dwa dzielniki, dzieli się tylko przez 1 oraz przez samą siebie

liczba złożona
liczba złożona

liczba naturalna większa od 1 będąca iloczynem liczb pierwszych