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 4⋅94 \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 a⋅b=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) →