Przejdź do treści
Matura 2027 • Zadania praktyczne

Klasyczne Algorytmy Liczbowe

Przed Tobą 10 zadań testowych. Sprawdź, czy Twoja wiedza z działu Klasyczne Algorytmy Liczbowe wystarczy, by zdobyć komplet punktów na maturze.

Pytanie 1 / 10Programowanie
Jak w Pythonie pobrać (wyodrębnić) ostatnią cyfrę z dodatniej liczby całkowitej `n` w systemie dziesiętnym?
Wszystkie 10 pytań z wyjaśnieniamiRozwiń, jeśli wolisz przejrzeć zestaw bez rozwiązywania testu.

Trzon matury z informatyki. Badanie właściwości liczb, liczby pierwsze, algorytm Euklidesa (NWD i NWW) oraz systemy liczbowe i schemat Hornera.

1.Jak w Pythonie pobrać (wyodrębnić) ostatnią cyfrę z dodatniej liczby całkowitej `n` w systemie dziesiętnym?

  • A.`n % 10`— poprawna
  • B.`n // 10`
  • C.`n / 10`
  • D.`n ** 10`
Dlaczego: Operacja modulo 10 (`% 10`) zwraca resztę z dzielenia przez 10, co zawsze odpowiada wartości ostatniej cyfry (cyfry jedności) w systemie dziesiętnym.

2.Aby trwale usunąć ostatnią cyfrę z liczby całkowitej `n` (tzw. obcięcie, przydatne w pętlach `while`), zastosujesz instrukcję:

  • A.`n = n // 10`— poprawna
  • B.`n = n % 10`
  • C.`n = n - 10`
  • D.`n = n / 10`
Dlaczego: Dzielenie całkowite przez 10 (`// 10`) odrzuca część ułamkową, co w efekcie przesuwa rzędy wielkości i "odcina" ostatnią cyfrę liczby dziesiętnej.

3.Jak najprościej w Pythonie sprawdzić, czy liczba całkowita `n` jest palindromem, używając operacji na napisach (tzw. slicing)?

  • A.`str(n) == str(n)[::-1]`— poprawna
  • B.`n == n.reverse()`
  • C.`n == n[::-1]`
  • D.`str(n) == reversed(str(n))`
Dlaczego: Najpierw rzutujemy liczbę na ciąg znaków funkcją `str(n)`. Następnie porównujemy ten napis z jego odwróconą kopią utworzoną za pomocą wycinka `[::-1]`.

4.Sprawdzając, czy liczba `n` jest pierwsza, optymalizujemy pętlę sprawdzającą dzielniki tak, aby iterować tylko do pierwiastka z `n` (n\sqrt{n}). Dlaczego to poprawne?

  • A.Każdy dzielnik większy od n\sqrt{n} ma do pary mniejszy dzielnik, który został sprawdzony już wcześniej.— poprawna
  • B.Liczby pierwsze mają z definicji dzielniki mniejsze od swojego pierwiastka.
  • C.Dzielniki powtarzają się co drugą liczbę, więc można skrócić czas trwania algorytmu o połowę.
  • D.W Pythonie duże pętle są przerywane przez interpreter, więc optymalizacja zapobiega błędom pamięci.
Dlaczego: Dzielniki występują w parach (np. dla n=36n=36, para to 494 \cdot 9). Jeśli liczba ma dzielnik większy od jej pierwiastka kwadratowego, to musi też mieć odpowiedni dzielnik mniejszy od tego pierwiastka. Zatem sprawdzenie mniejszych pozwala nam wyciągnąć 100% pewności.

5.W standardowym algorytmie rozkładu liczby `n` na czynniki pierwsze (z użyciem pętli `while`), co robimy, gdy znajdziemy pierwszy najmniejszy dzielnik `k`?

  • A.Dopisujemy `k` do wyniku i dzielimy `n` całkowitoliczbowo przez `k` (`n = n // k`).— poprawna
  • B.Przerywamy działanie całego algorytmu instrukcją `break`.
  • C.Zwiększamy wartość `k` o 1, pozostawiając `n` bez zmian.
  • D.Zmniejszamy `n` o wartość `k` (`n = n - k`).
Dlaczego: Gdy znajdziemy czynnik pierwszy `k`, to znaczy że dzieli on aktualną liczbę `n`. Rejestrujemy to `k` jako część rozkładu, a liczbę `n` redukujemy przez wydzielenie jej przez ten czynnik, co zmniejsza obszar poszukiwań kolejnych.

6.Która wersja algorytmu Euklidesa do znajdowania Największego Wspólnego Dzielnika (NWD) jest znacznie optymalniejsza (wykonuje o wiele mniej kroków) dla bardzo różnych danych, np. a=1000a=1000 i b=2b=2?

  • A.Wersja wykorzystująca operację reszty z dzielenia (modulo).— poprawna
  • B.Wersja wykorzystująca odejmowanie.
  • C.Zarówno wersja z dzieleniem jak i odejmowaniem wykonają tyle samo kroków.
  • D.Wersja iteracyjna dodająca dzielniki z krokiem równym 1.
Dlaczego: Wersja modulo z resztą z dzielenia jest znacznie szybsza, bo natychmiast przeskakuje ewentualne setki operacji odejmowania w jednym kroku (dla 1000 i 2 wersja z odejmowaniem robi 500 pętli, wersja z modulo tylko jedną!).

7.Jeśli na maturze potrzebujesz wyznaczyć Największy Wspólny Dzielnik (NWD) i nie masz obowiązku pisania algorytmu od zera, jakiej wbudowanej funkcji w Pythonie użyjesz?

  • A.`math.gcd(a, b)`— poprawna
  • B.`math.nwd(a, b)`
  • C.`math.lcm(a, b)`
  • D.`numpy.gcd(a, b)`
Dlaczego: Moduł wbudowany `math` dostarcza zoptymalizowaną funkcję `gcd()` (skrót od angielskiego Greatest Common Divisor, czyli NWD). Trzeba jedynie pamiętać o wcześniejszym wpisaniu `import math` na górze pliku.

8.Jak z matematycznego punktu widzenia połączyć wyliczone przed chwilą NWD dwóch liczb aa i bb, aby błyskawicznie poznać ich Najmniejszą Wspólną Wielokrotność (NWW)?

  • A.`NWW = (a * b) // NWD(a, b)`— poprawna
  • B.`NWW = NWD(a, b) * a * b`
  • C.`NWW = (a + b) // NWD(a, b)`
  • D.`NWW = NWD(a, b) // (a * b)`
Dlaczego: Z własności matematycznych wynika wzór ab=NWD(a,b)NWW(a,b)a \cdot b = NWD(a,b) \cdot NWW(a,b). Dlatego chcąc policzyć NWW wystarczy wymnożyć liczby przez siebie, a otrzymany wynik podzielić (całkowitoliczbowo) przez ich NWD.

9.W jaki sposób najszybciej zamienić liczbę z systemu dwójkowego, zapisaną jako napis `"1011"`, na dziesiętną liczbę całkowitą (typ `int`)?

  • A.`int('1011', 2)`— poprawna
  • B.`int('1011')`
  • C.`bin('1011')`
  • D.`dec('1011', 2)`
Dlaczego: Wbudowana w Pythona klasa konwertująca `int()` posiada opcjonalny drugi argument, którym jest podstawa (baza) użytego systemu liczbowego (w tym wypadku 2). Domyślną wartością tego argumentu jest 10.

10.Zamieniając na maturze ręcznie liczbę z systemu pp-adycznego (np. o podstawie 3) na system dziesiętny przy pomocy optymalnego schematu Hornera, na czym polega jego iteracyjny krok?

  • A.Na mnożeniu dotychczasowego wyniku przez podstawę systemu i dodaniu do niego kolejnej cyfry wiodącej.— poprawna
  • B.Na dzieleniu liczby przez 10 i zapisywaniu w tablicy reszt z dzielenia z tego kroku.
  • C.Na potęgowaniu kolejnych cyfr z osobna i mnożeniu ich przez 10.
  • D.Na konwersji znaków z bazy do ASCII i dodawaniu ich do zmiennej pomocniczej.
Dlaczego: Schemat Hornera pozwala unikać potęgowania. W pętli (odczytując zapis od lewej do prawej), bierzemy dotychczasowy wynik (akumulator), mnożymy go przez podstawę systemu i dodajemy numeryczną wartość napotkanej właśnie kolejnej cyfry.

O czym musisz pamiętać w zadaniach z Programowania?

Zadania z programowania na maturze to sprawdzian logicznego myślenia, znajomości klasycznych algorytmów (np. sortowania, wyszukiwania, operacji na liczbach i napisach) oraz czytania ze zrozumieniem.

  • Pamiętaj, że w Pythonie indeksowanie struktur (jak listy czy napisy) zaczyna się od 0, natomiast w pseudokodzie CKE najczęściej od 1.
  • Zwracaj szczególną uwagę na poprawne wczytywanie danych – pamiętaj o rzutowaniu na odpowiednie typy (np. int()) i pozbywaniu się białych znaków (strip()).
  • Dbaj o złożoność obliczeniową. Jeśli to możliwe, unikaj wielokrotnie zagnieżdżonych pętli, aby Twój program zdążył się wykonać w regulaminowym czasie.

Strategia Maturalna (Python / Algorytmy):

"Zanim rzucisz się do pisania kodu na komputerze, zrozum problem na kartce papieru. Zawsze korzystaj z danych z pliku przyklad.txtw trakcie testowania swoich rozwiązań. Jeśli odpowiedź zgadza się z plikiem z odpowiedziami do przykładu, masz ogromne szanse, że Twój kod zadziała poprawnie również dla głównych danych z arkusza."

To nie koniec powtórki!

Przećwicz kolejny zestaw pytań i utrwal składnię oraz algorytmy.

Dalej: Algorytmy Tekstowe (Stringi)