Szkoła Podstawowa nr 1 w Jarosławiu Szkoła Podstawowa nr 1 w Jarosławiu
Algorytmy na liczbach naturalnych
Algorithms on Natural Numbers

📚 Warto powtórzyć

📚 Review before the lesson

  1. Czym jest algorytm?
  2. Czym jest specyfikacja problemu (zadania)?
  3. Na czym polega przedstawianie algorytmu w postaci listy kroków?
  4. W jaki sposób przedstawiamy na schemacie blokowym sytuację warunkową?
  5. Na czym polega iteracja?
  6. Jaką instrukcję stosujemy do zapisywania sytuacji warunkowej w Pythonie? Wyjaśnij jej działanie.
  7. Jaką instrukcję stosujemy do zapisywania iteracji w Pythonie? Wyjaśnij jej działanie.
  1. What is an algorithm?
  2. What is a problem specification?
  3. What does presenting an algorithm as a list of steps involve?
  4. How do we represent a conditional situation in a flowchart?
  5. What is iteration?
  6. What instruction do we use for conditionals in Python? Explain how it works.
  7. What instruction do we use for iteration in Python? Explain how it works.

Na lekcjach informatyki w klasie ósmej poznamy podstawowe algorytmy na liczbach naturalnych stosowane w matematyce i informatyce. Zapiszemy je w języku programowania Python. W tym temacie:

In eighth-grade computer science, we will learn fundamental algorithms on natural numbers used in mathematics and computer science. We will implement them in Python. In this topic:

  1. poznasz i zaprogramujeszyou will learn and program algorytm badania podzielności liczb,the divisibility testing algorithm,
  2. poznasz i zaprogramujeszyou will learn and program algorytm Euklidesa w dwóch wersjach: z odejmowaniem i z resztą z dzielenia,Euclid's algorithm in two versions: subtraction and division remainder,
  3. poznasz i zaprogramujeszyou will learn and program algorytm wyodrębniania cyfr danej liczby.the digit extraction algorithm.

1 Badanie podzielności liczb naturalnych Testing Divisibility of Natural Numbers

Jeśli reszta z dzielenia dwóch liczb naturalnych jest równa zero, mówimy, że pierwsza liczba (dzielna) jest podzielna przez drugą (dzielnik). If the remainder when dividing two natural numbers equals zero, we say the first number (dividend) is divisible by the second (divisor).
Operator modulo:Modulo operator:
Do wyznaczania reszty z dzielenia używamy operatora mod. Zapis reszta = a mod b oznacza, że zmiennej reszta przypisano resztę z dzielenia a przez b. W Pythonie: reszta = a % b We use the mod operator to find the remainder. remainder = a mod b means the variable remainder gets the remainder of a÷b. In Python: remainder = a % b

Specyfikacja zadania – Badanie podzielności

Algorithm Specification – Divisibility Test

Zadanie:
Task:

Sprawdź, czy liczba naturalna a jest podzielna przez liczbę naturalną b (b ≠ 0).

Check whether natural number a is divisible by natural number b (b ≠ 0).

Dane:
Input:

Liczby naturalne: a, b  (b ≠ 0)

Wynik:
Output:

Komunikat o podzielności lub jej braku

Message about divisibility or lack thereof

Lista kroków:
Step list:
START Wprowadź (a, b) reszta = a mod b Czy reszta = 0? TAK „a jest podzielne przez b" NIE „a NIE jest podzielne przez b" KONIEC / END

Rys. 2. Schemat blokowy algorytmu badania podzielności liczb

Fig. 2. Flowchart of the divisibility testing algorithm

Tabela 1. Testowanie algorytmu badania podzielności

Table 1. Testing the divisibility algorithm

ab Obliczenie resztyRemainder Czy reszta = 0?Remainder = 0? KomunikatMessage
42742 mod 7 = 0TAKYESa jest podzielne przez ba is divisible by b
2458245 mod 8 = 5NIENOa nie jest podzielne przez ba is not divisible by b
27627 mod 6 = 3NIENOa nie jest podzielne przez ba is not divisible by b
18618 mod 6 = 0TAKYESa jest podzielne przez ba is divisible by b
1255125 mod 5 = 0TAKYESa jest podzielne przez ba is divisible by b
🐍 Python – Podzielnosc.pyPython – Divisibility.py
a = int(input("Wprowadź wartość dzielnej: "))
b = int(input("Wprowadź wartość dzielnika: "))

if a % b == 0:
    print("a jest podzielne przez b")
else:
    print("a nie jest podzielne przez b")

input("\n\nAby zakończyć, naciśnij Enter")
ĆWICZENIE 1EXERCISE 1 🔢 Kalkulator podzielności – symulacja krok po kroku 🔢 Divisibility Calculator – step-by-step simulation

Podaj dwie liczby naturalne i sprawdź, czy a dzieli się przez b. Algorytm wypisze każdy krok.

Enter two natural numbers and check whether a is divisible by b. The algorithm will print every step.

a = b =
ĆWICZENIE 2EXERCISE 2 Quiz – operator modulo Quiz – modulo operator

Jaki jest wynik wyrażenia 27 mod 6?

What is the result of 27 mod 6?

A
0
B
4
C
3
D
6

2 Algorytm Euklidesa Euclid's Algorithm

Algorytm Euklidesa służy do znajdowania największego wspólnego dzielnika (NWD) dwóch liczb naturalnych różnych od zera. NWD możemy wykorzystać np. do skracania ułamków – licznik i mianownik dzielimy przez ich NWD. Euclid's Algorithm finds the Greatest Common Divisor (GCD) of two non-zero natural numbers. GCD is useful e.g. for simplifying fractions – divide numerator and denominator by their GCD.

2a. Wersja z odejmowaniem

2a. Subtraction version

Euklides zauważył, że NWD dwóch liczb jest taki sam jak NWD ich różnicy. Dlatego od większej liczby odejmujemy mniejszą i zastępujemy większą otrzymaną różnicą – powtarzamy, dopóki obie liczby nie będą równe.

Euclid noticed that the GCD of two numbers equals the GCD of their difference. We subtract the smaller from the larger and replace the larger with the result – we repeat until both numbers are equal.

Lista kroków – wersja z odejmowaniem

Step list – subtraction version

🐍 Python – Euklides_odejmowanie.pyPython – Euclid_subtraction.py
a = int(input("Podaj pierwszą liczbę: "))
b = int(input("Podaj drugą liczbę: "))

while a != b:
    if a > b:
        a = a - b
    else:
        b = b - a

print("NWD =", a)
input("\n\nAby zakończyć, naciśnij Enter")

2b. Wersja z resztą z dzielenia

2b. Division remainder version

Wersja z resztą z dzielenia jest znacznie szybsza. Wykonujemy kolejne dzielenia: dzielną zastępujemy dzielnikiem, a dzielnik – resztą z dzielenia, aż reszta wyniesie 0. Wynikiem jest ostatnia niezerowa reszta.

The division remainder version is much faster. We repeatedly divide: replace the dividend with the divisor and the divisor with the remainder, until the remainder equals 0.

Uwaga o zmiennej pomocniczej:⚠ Note on auxiliary variable: Jeśli pod tę samą zmienną podstawiamy kolejną wartość, poprzednia wartość znika. Dlatego wartość b musimy przechować w zmiennej pomocniczej dzielnik. Assigning a new value to a variable overwrites the old one. We must save b's value in an auxiliary variable divisor first.

Lista kroków – wersja z resztą z dzielenia

Step list – division remainder version

Tabela 3. Testowanie algorytmu Euklidesa – wersja z resztą (a=28, b=35)

Table 3. Testing Euclid's algorithm – remainder version (a=28, b=35)

ab Czy b = 0?b = 0? DziałaniaOperations
2835NIENOdzielnik=35; b=28 mod 35=28; a=35
3528NIENOdzielnik=28; b=35 mod 28=7; a=28
287NIENOdzielnik=7; b=28 mod 7=0; a=7
70TAKYESNWD / GCD = 7
🐍 Python – Euklides_dzielenie.pyPython – Euclid_division.py
a = int(input("Podaj pierwszą liczbę: "))
b = int(input("Podaj drugą liczbę: "))

while b != 0:
    dzielnik = b        # zapamiętaj aktualny dzielnik
    b = a % b           # reszta z dzielenia
    a = dzielnik        # dzielnik staje się nową dzielną

print("NWD =", a)
input("\n\nAby zakończyć, naciśnij Enter")
ĆWICZENIE 3EXERCISE 3 📐 Kalkulator NWD z wizualizacją kroków 📐 GCD Calculator with step visualization

Podaj dwie liczby naturalne. Algorytm obliczy NWD metodą z resztą z dzielenia i pokaże każdy krok.

Enter two natural numbers. The algorithm will find GCD using the division remainder method and show every step.

a = b =
ĆWICZENIE 4EXERCISE 4 Quiz – algorytm Euklidesa Quiz – Euclid's algorithm

Do czego służy algorytm Euklidesa?

What is Euclid's algorithm used for?

A
Sprawdzania podzielności liczbTesting divisibility of numbers
B
Znajdowania największego wspólnego dzielnika (NWD)Finding the greatest common divisor (GCD)
C
Wyodrębniania cyfr liczbyExtracting digits of a number
D
Sortowania liczbSorting numbers

3 Wyodrębnianie cyfr danej liczby naturalnej Extracting Digits of a Natural Number

Aby wyodrębnić cyfry liczby naturalnej (od cyfry jedności), powtarzamy obliczanie reszty z dzielenia przez 10 – pierwsza reszta to cyfra jedności. Następnie odejmujemy tę cyfrę od liczby i dzielimy przez 10, aż do uzyskania wyniku równego zero. To extract digits of a natural number (from the units digit), we repeatedly compute the remainder of dividing by 10 – the first remainder is the units digit. Then we subtract that digit and divide by 10, until the result is zero.

Specyfikacja zadania – Wyodrębnianie cyfr

Algorithm Specification – Digit Extraction

Dane:
Input:

Liczba naturalna różna od 0: liczba

Natural number different from 0: number

Wynik:
Output:

Cyfry danej liczby, zaczynając od cyfry jedności

The digits of the number, starting from the units digit

Tabela 4. Testowanie algorytmu wyodrębniania cyfr (liczba = 647)

Table 4. Testing digit extraction algorithm (number = 647)

liczbanumber Czy liczba = 0?number = 0? DziałaniaOperations CyfraDigit
647NIENO cyfra = 647 mod 10 = 7; liczba = (647−7)/10 = 64 digit = 647 mod 10 = 7; number = (647−7)/10 = 64 7
64NIENO cyfra = 64 mod 10 = 4; liczba = (64−4)/10 = 6 digit = 64 mod 10 = 4; number = (64−4)/10 = 6 4
6NIENO cyfra = 6 mod 10 = 6; liczba = (6−6)/10 = 0 digit = 6 mod 10 = 6; number = (6−6)/10 = 0 6
0TAKYES
START Wprowadź (liczba) cyfra = liczba mod 10 Wyprowadź (cyfra) liczba = (liczba – cyfra) / 10 Czy liczba = 0? TAK KONIEC / END NIE

Rys. 9. Schemat blokowy algorytmu wyodrębniania cyfr od cyfry jedności

Fig. 9. Flowchart of digit extraction algorithm (from units digit)

🐍 Python – Cyfry.pyPython – Digits.py
liczba = int(input("Podaj liczbę: "))
print("Cyfry liczby", liczba, "od ostatniej:")

if liczba == 0:
    print(liczba)                      # przypadek szczególny
else:
    while liczba != 0:
        cyfra = liczba % 10             # cyfra jedności
        print(cyfra)
        liczba = (liczba - cyfra) // 10  # usuń cyfrę jedności

input("\n\nAby zakończyć, naciśnij Enter")
ĆWICZENIE 5EXERCISE 5 Wyodrębnianie cyfr – wizualizacja krok po kroku Digit Extraction – step-by-step visualization

Podaj dowolną liczbę naturalną i obserwuj, jak algorytm wyodrębnia jej cyfry od cyfry jedności.

Enter any natural number and watch the algorithm extract its digits starting from the units digit.

liczba =number =
ĆWICZENIE 6EXERCISE 6 Uzupełnij brakujące wartości w kodzie Fill in the missing values in the code

Wpisz brakujące liczby. Wskazówka: w systemie dziesiętnym podstawą jest liczba 10.

Fill in the missing numbers. Hint: the decimal system uses base 10.

while liczba != 0:
    cyfra = liczba % 
    print(cyfra)
    liczba = (liczba - cyfra) // 
ĆWICZENIE 7EXERCISE 7 Quiz – liczba iteracji Quiz – number of iterations

Ile razy wykona się pętla while w algorytmie wyodrębniania cyfr dla liczby trzycyfrowej?

How many times does the while loop execute in the digit extraction algorithm for a 3-digit number?

A
1
B
2
C
3
D
10
ĆWICZENIE 8EXERCISE 8 Quiz – dlaczego while? Quiz – why while?

Dlaczego w algorytmie wyodrębniania cyfr stosujemy instrukcję while, a nie for?

Why do we use a while loop rather than for in the digit extraction algorithm?

A
Pętla for jest wolniejszaThe for loop is slower
B
Liczba iteracji nie jest z góry określona – zależy od liczby cyfrThe number of iterations is not known in advance – it depends on the number of digits
C
Instrukcja for nie istnieje w PythonieThe for instruction doesn't exist in Python
D
Pętla while jest zawsze szybszaThe while loop is always faster