Zadanie 1

Zapisz w wybranej przez siebie notacji (w postaci pseudokodupseudokodpseudokodu lub w wybranym języku programowania) algorytm, który dla danej liczby x obliczy sumę jej parzystych czynników pierwszych. Maksymalna liczba punktów za rozwiązanie zadania zostanie przyznana, jeśli algorytm wykona O(log x) operacji arytmetycznych, wymienionych w uwadze.

Uwaga!

W zapisie algorytmu możesz wykorzystać tylko operacje arytmetyczne: dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, resztę z dzielenia oraz porównywanie liczb, instrukcje sterujące i przypisania do zmiennych lub samodzielnie napisane funkcje, zawierające wcześniej wymienione operacje.

Specyfikacja problemu:

Dane:

  • x – liczba naturalna, której sumę parzystych czynników pierwszych należy obliczyć

Wynik:

  • wynik – suma parzystych czynników pierwszych liczby x

Rozwiązanie

Rozwiązanie zadania przedstawimy w postaci pseudokodu, ponieważ na egzaminie maturalnym można korzystać z pseudokodu lub z wybranego języka programowania: C++, Java lub Python.

Jedynym parzystym czynnikiem pierwszym danej liczby może być 2, ponieważ 2 to jedyna parzysta liczba pierwsza.

Jeżeli liczba x jest nieparzysta, to nie ma żadnych parzystych czynników pierwszych, zwracamy więc 0. Jeżeli liczba x jest parzysta, to dzielimy liczbę przez 2, aż stanie się niepodzielna przez 2. Na koniec zwracamy wynik, czyli liczbę 2 pomnożoną przez liczbę jej wystąpień jako czynnika pierwszego danej liczby.

Linia 1. funkcja sumaPierwszych otwórz nawias okrągły x zamknij nawias okrągły dwukropek. Linia 2. jeżeli x mod 2 znak równości 1 dwukropek. Linia 3. zwróć 0. Linia 4. suma znak równości 0. Linia 5. dopóki x mod 2 znak równości 0 dwukropek. Linia 6. suma ← suma plus 2. Linia 7. x ← x div 2. Linia 8. zwróć suma.

Zauważenie, że jedynym parzystym czynnikiem pierwszym danej liczby może być 2, ułatwia rozwiązanie zadania.

Za przedstawione rozwiązanie dostaniemy maksymalną liczbę punktów, ponieważ jego złożoność wynosi O(log x).

Praca domowa

Przedstaw rozwiązanie zadania w postaci programu napisanego w wybranym  języku (C++, Java lub Python).

Słownik

algorytm liniowy
algorytm liniowy

algorytm zwany również sekwencyjnym; kroki algorytmu następują po sobie; wykonanie jednego kroku powoduje przejście bezpośrednio do kolejnego; nie określa się w nim żadnych warunków

algorytm rozgałęziony
algorytm rozgałęziony

algorytm warunkowy; algorytm, w którym może występować kilka ciągów działań; po spełnieniu lub niespełnieniu danego warunku następuje wybór jednego z ciągów działań

pseudokod
pseudokod

jedna z metod zapisywania algorytmów; pseudokod jest zapisem uniwersalnym, w przypadku którego nie używa się słów kluczowych języków programowania; nie istnieją sformalizowane reguły zapisu pseudokodu – ma być on przejrzysty i zrozumiały, a do jego odczytania nie może być wymagana znajomość języków programowania