Treści usunięte z lekcji zgodnie z podstawą programową
z 2024 r. sprawdź w e-booku podręcznika na eduranga.pl.

Film 1Programowanie w Pythonie. Badanie własności liczb całkowitych. Liczby pierwsze

W filmie omówiono algorytm sprawdzający, czy dana liczba jest pierwsza, oraz pokazano jego implementację.

Film 2Programowanie w Pythonie. Suma dzielników liczby

Film prezentuje zagadnienie złożoności czasowej algorytmu na przykładzie badania własności liczb całkowitych, a konkretnie badania sumy dzielników danej liczby.

Ćwiczenie 0

Zdefiniuj funkcję czy_parzysta(n), której wynikiem jest True w przypadku, gdy liczba podana jako parametr jest parzysta, lub False, gdy jest nieparzysta. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji czy_parzysta(1) jest False.
  • Wynikiem funkcji czy_parzysta(2) jest True.

Wskazówka
Zauważ, że algorytm sprawdzania parzystości liczby opiera się na badaniu reszty z dzielenia liczby przez 2. Jeśli ta reszta równa jest 0, to liczba jest parzysta, w przeciwnym wypadku – nieparzysta.

# zdefiniuj funkcję def czy_parzysta(n): pass # testy print(czy_parzysta(1)) print(czy_parzysta(2))
Wynikiem funkcji czy_parzysta(8) jest True.
testResult = czy_parzysta(8)==True
True
czy_parzysta(8)
Wynikiem funkcji czy_parzysta(13) jest False.
testResult = czy_parzysta(13)==False
False
czy_parzysta(13)
Wynikiem funkcji czy_parzysta(2468086420) jest True.
testResult = czy_parzysta(2468086420)==True
True
czy_parzysta(2468086420)
Rozwiąż ćwiczenie

Ćwiczenie 1Czy liczba jest pierwsza?

Zdefiniuj funkcję logiczną czy_pierwsza(n), której parametrem jest liczba naturalna n większa od 1, a wynikiem wartość True, gdy jest ona liczbą pierwszą, albo False, gdy nią nie jest. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji czy_pierwsza(11) jest True.
  • Wynikiem funkcji czy_pierwsza(99) jest False.
# zdefiniuj funkcję def czy_pierwsza(n): pass # testy print(czy_pierwsza(11)) print(czy_pierwsza(99))
Wynikiem funkcji czy_pierwsza(2) jest True.
testResult = czy_pierwsza(2)==True
True
czy_pierwsza(2)
Wynikiem funkcji czy_pierwsza(15555) jest False.
testResult = czy_pierwsza(15555)==False
False
czy_pierwsza(15555)
Wynikiem funkcji czy_pierwsza(7) jest True.
testResult = czy_pierwsza(7)==True
True
czy_pierwsza(7)
Rozwiąż ćwiczenie

Ćwiczenie 2N-ta liczba pierwsza

Zdefiniuj funkcję pierwsza(n), której parametrem będzie liczba naturalna n, a wynikiem – n-ta liczba pierwsza. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji pierwsza(7) jest 17.
  • Wynikiem funkcji pierwsza(25) jest 97.
# zdefiniuj funkcję def czy_pierwsza(n): pass # zdefiniuj funkcję def pierwsza(n): pass # testy print(pierwsza(7)) print(pierwsza(25))
Wynikiem funkcji pierwsza(1) jest 2.
testResult = pierwsza(1)==2
2
pierwsza(1)
Wynikiem funkcji pierwsza(17) jest 59.
testResult = pierwsza(17)==59
59
pierwsza(17)
Wynikiem funkcji pierwsza(100) jest 541.
testResult = pierwsza(100)==541
541
pierwsza(100)
Rozwiąż ćwiczenie

Ćwiczenie 3Liczby bliźniacze

Liczby bliźniacze to liczby pierwsze różniące się o 2. W pierwszej setce jest osiem par takich liczb: 3 i 5, 5 i 7, 11 i 13, 17 i 19, 29 i 31, 41 i 43, 59 i 61, 71 i 73. Zdefiniuj funkcję blizniacze(n), której parametrem jest liczba naturalna n, a wynikiem pierwsza liczba z n-tej pary liczb bliźniaczych. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji blizniacze(3) jest 11.
  • Wynikiem funkcji blizniacze(7) jest 59.
# zdefiniuj funkcję def czy_pierwsza(n): pass # zdefiniuj funkcję def blizniacze(n): pass # testy print(blizniacze(3)) print(blizniacze(7))
Wynikiem funkcji blizniacze(1) jest 3.
testResult = blizniacze(1)==3
3
blizniacze(1)
Wynikiem funkcji blizniacze(2) jest 5.
testResult = blizniacze(2)==5
5
blizniacze(2)
Wynikiem funkcji blizniacze(10) jest 107.
testResult = blizniacze(10)==107
107
blizniacze(10)
Rozwiąż ćwiczenie

Ćwiczenie 4Suma dzielników liczby

Zdefiniuj funkcję suma_dzielnikow(n), której parametrem jest liczba naturalna n, a wynikiem – suma dzielników tej liczby. Sformułuj dwa algorytmy i porównaj szybkość działania każdego z nich dla różnych danych. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji suma_dzielnikow(7) jest 8.
  • Wynikiem funkcji suma_dzielnikow(16) jest 31.

Algorytm sprawdzający podzielność danej liczby przez kolejne liczby naturalne – od 1 do niej samej.

# zdefiniuj funkcję def suma_dzielnikow(n): pass # testy print(suma_dzielnikow(7)) print(suma_dzielnikow(16))
Wynikiem funkcji suma_dzielnikow(2) jest 3.
testResult = suma_dzielnikow(2)==3
3
suma_dzielnikow(2)
Wynikiem funkcji suma_dzielnikow(5) jest 6.
testResult = suma_dzielnikow(5)==6
6
suma_dzielnikow(5)
Wynikiem funkcji suma_dzielnikow(100) jest 217.
testResult = suma_dzielnikow(100)==217
217
suma_dzielnikow(100)
Rozwiąż ćwiczenie

Algorytm sprawdzający podzielność danej liczby przez kolejne dzielniki od 2 do pierwiastka z tej liczby.

from math import sqrt # zdefiniuj funkcję def suma_dzielnikow(n): pass # testy print(suma_dzielnikow(7)) print(suma_dzielnikow(16))
Wynikiem funkcji suma_dzielnikow(2) jest 3.
testResult = suma_dzielnikow(2)==3
3
suma_dzielnikow(2)
Wynikiem funkcji suma_dzielnikow(5) jest 6.
testResult = suma_dzielnikow(5)==6
6
suma_dzielnikow(5)
Wynikiem funkcji suma_dzielnikow(100) jest 217.
testResult = suma_dzielnikow(100)==217
217
suma_dzielnikow(100)
Rozwiąż ćwiczenie

Ćwiczenie 5Liczby zaprzyjaźnione

Liczby zaprzyjaźnione to dwie liczby naturalne, z których każda jest równa sumie dzielników właściwych drugiej liczby (np. suma dzielników właściwych liczby 220 wynosi 284, a suma dzielników właściwych liczby 284 – 220). Zdefiniuj funkcję zaprzyjaznione(n), której parametrem jest liczba naturalna n, a wynikiem – mniejsza liczba z n-tej pary liczb zaprzyjaźnionych. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji zaprzyjaznione(1) jest 220.
  • Wynikiem funkcji zaprzyjaznione(3) jest 2620.
from math import sqrt # zdefiniuj funkcję def suma_dzielnikow_w(n): pass # zdefiniuj funkcję def zaprzyjaznione(n): pass # testy print(zaprzyjaznione(1)) print(zaprzyjaznione(3))
Wynikiem funkcji zaprzyjaznione(2) jest 1184.
testResult = zaprzyjaznione(2)==1184
1184
zaprzyjaznione(2)
Wynikiem funkcji zaprzyjaznione(5) jest 6232.
testResult = zaprzyjaznione(5)==6232
6232
zaprzyjaznione(5)
Wynikiem funkcji zaprzyjaznione(7) jest 12285.
testResult = zaprzyjaznione(7)==12285
12285
zaprzyjaznione(7)
Rozwiąż ćwiczenie

Ćwiczenie dodatkowe 1

Zdefiniuj funkcję parzyste(liczba1, liczba2), której parametrami są liczby całkowite dodatnie, przy czym liczba1 < liczba2, a ich różnica wynosi co najmniej 3. Wynikiem funkcji jest lista dwóch liczb – najmniejszej liczby parzystej większej od parametru liczba1 i największej liczby parzystej mniejszej od parametru liczba2. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji parzyste(4, 9) jest [6, 8].
  • Wynikiem funkcji parzyste(9, 12) jest [10, 10].
  • Wynikiem funkcji parzyste(14, 75) jest [16, 74].
# zdefiniuj funkcję def parzyste(liczba1, liczba2): pass # testy print(parzyste(4, 9)) print(parzyste(9, 12)) print(parzyste(14, 75))
Wynikiem funkcji parzyste(1,9999) jest [2, 9998].
testResult = parzyste(1,9999)==[2, 9998]
[2, 9998]
parzyste(1,9999)
Wynikiem funkcji parzyste(89898,89901) jest [89900, 89900].
testResult = parzyste(89898,89901)==[89900, 89900]
[89900, 89900]
parzyste(89898,89901)
Wynikiem funkcji parzyste(10,1000000) jest [12, 999998].
testResult = parzyste(10,1000000)==[12, 999998]
[12, 999998]
parzyste(10,1000000)
Rozwiąż ćwiczenie

Ćwiczenie dodatkowe 2

Zdefiniuj funkcję nieparzyste(n), której wynikiem jest liczba liczb nieparzystych podzielnych przez 7 nie większych od parametru n. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji nieparzyste(30) jest 2.
  • Wynikiem funkcji nieparzyste(35) jest 3.
  • Wynikiem funkcji nieparzyste(100) jest 7.
# zdefiniuj funkcję def nieparzyste(n): pass # testy print(nieparzyste(30)) print(nieparzyste(35)) print(nieparzyste(100))
Wynikiem funkcji nieparzyste(300) jest 21.
testResult = nieparzyste(300)==21
21
nieparzyste(300)
Wynikiem funkcji nieparzyste(999) jest 71.
testResult = nieparzyste(999)==71
71
nieparzyste(999)
Wynikiem funkcji nieparzyste(987621) jest 70544.
testResult = nieparzyste(987621)==70544
70544
nieparzyste(987621)
Rozwiąż ćwiczenie

Ćwiczenie dodatkowe 3

Liczby lustrzane to takie dwie liczby, które są lustrzanym odbiciem, np.: 123 i 321, 79 i 97, 1245 i 5421. Jeżeli zapiszemy razem dowolną liczbę i jej lustrzane odbicie, np. 123321, to tak otrzymana liczba jest podzielna przez 11.

Na przykład:

123321 : 11 = 11211
7997 : 11 = 727
12455421 : 11 = 1132311

Zdefiniuj funkcję lustro_11(liczba), której parametrem jest liczba całkowita dodatnia, a wynikiem iloraz liczby i doklejonej do niej jej liczby lustrzanej przez 11. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji lustro_11(123) jest 11211 (ponieważ 123321 : 11 = 11211).
  • Wynikiem funkcji lustro_11(893) jest 81218 (ponieważ 893398 : 11 = 81218).
# zdefiniuj funkcję def lustro_11(liczba): pass # testy print(lustro_11(123)) print(lustro_11(893))
Wynikiem funkcji lustro_11(7) jest 7.
testResult = lustro_11(7)==7
7
lustro_11(7)
Wynikiem funkcji lustro_11(1482) jest 1347531.
testResult = lustro_11(1482)==1347531
1347531
lustro_11(1482)
Wynikiem funkcji lustro_11(947352) jest 86122932159.
testResult = lustro_11(947352)==86122932159
86122932159
lustro_11(947352)
Rozwiąż ćwiczenie

Ćwiczenie dodatkowe 4

Zdefiniuj funkcję dwie(liczba), której wynikiem jest suma cyfr jedności i dziesiątek danej liczby powiększona o 1, gdy suma okazała się liczbą nieparzystą, lub zmniejszona o 1, gdy suma okazała się liczbą parzystą. Parametr liczba przyjmuje wartości z zakresu od 10 do 1 000 000. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji dwie(1284456) jest 12.
  • Wynikiem funkcji dwie(892339) jest 11.
# zdefiniuj funkcję def dwie(liczba): pass # testy print(dwie(1284456)) print(dwie(892339))
Wynikiem funkcji dwie(11) jest 1.
testResult = dwie(11)==1
1
dwie(11)
Wynikiem funkcji dwie(1221) jest 4.
testResult = dwie(1221)==4
4
dwie(1221)
Wynikiem funkcji dwie(3488677) jest 13.
testResult = dwie(3488677)==13
13
dwie(3488677)
Rozwiąż ćwiczenie

Zadanie 1Liczby czworacze

Liczby czworacze to liczby pierwsze mające postać: n, n + 2, n + 6 i n + 8. Zdefiniuj funkcję czworacze(n), której parametrem jest liczba naturalna n, a wynikiem – lista takich liczb czworaczych, w których pierwsza liczba jest większa od podanego parametru. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji czworacze(9) jest [11, 13, 17, 19].
  • Wynikiem funkcji czworacze(150) jest [191, 193, 197, 199].
# zdefiniuj funkcję def czy_pierwsza(n): pass # zdefiniuj funkcję def czworacze(n): pass # testy print(czworacze(9)) print(czworacze(150))
Wynikiem funkcji czworacze(1) jest [5, 7, 11, 13].
testResult = czworacze(1)==[5, 7, 11, 13]
[5, 7, 11, 13]
czworacze(1)
Wynikiem funkcji czworacze(5) jest [11, 13, 17, 19].
testResult = czworacze(5)==[11, 13, 17, 19]
[11, 13, 17, 19]
czworacze(5)
Wynikiem funkcji czworacze(100) jest [101, 103, 107, 109].
testResult = czworacze(100)==[101, 103, 107, 109]
[101, 103, 107, 109]
czworacze(100)
Rozwiąż ćwiczenie

Zadanie 2Problem Collatza

Pierwsza liczba ciągu Collatza jest dowolną liczbą naturalną x, a każda kolejna wartość ciągu obliczana jest na podstawie poprzedniej według poniższych zasad:

  • jeśli poprzednia wartość była parzysta, to należy podzielić ją przez 2;
  • jeśli poprzednia wartość była nieparzysta, to należy pomnożyć ją przez 3 i dodać 1.


Przypuszcza się, że niezależnie od której liczby naturalnej zaczniemy, zawsze po pewnej skończonej liczbie kroków otrzymamy liczbę 1. (Udowodniono to dla liczb mniejszych niż kilka tryliardów).

Zdefiniuj funkcję collatz(x), której parametrem jest liczba naturalna x, czyli wartość początkowa ciągu liczb Collatza, a wynikiem – liczba kroków, po których w ciągu pojawi się liczba 1. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji collatz(10) jest 6.
  • Wynikiem funkcji collatz(15) jest 17.
# zdefiniuj funkcję def collatz(x): pass # testy print(collatz(10)) print(collatz(15))
Wynikiem funkcji collatz(1) jest 0.
testResult = collatz(1)==0
0
collatz(1)
Wynikiem funkcji collatz(2) jest 1.
testResult = collatz(2)==1
1
collatz(2)
Wynikiem funkcji collatz(20) jest 7.
testResult = collatz(20)==7
7
collatz(20)
Rozwiąż ćwiczenie

Zadanie 3Suma kwadratów cyfr

Polski matematyk Hugo Steinhaus zauważył, że jeśli zsumujemy kwadraty cyfr wybranej liczby naturalnej, a następnie będziemy sumować kwadraty cyfr kolejnych otrzymanych liczb, to w pewnym momencie zawsze otrzymamy 1 lub 4. Zdefiniuj funkcję suma_kwadratow(n), której wynikiem będzie suma kwadratów cyfr liczby podanej jako parametr. Przetestuj działanie dla liczby 123 i kilku innych liczb początkowych.

# zdefiniuj funkcję def suma_kwadratow(n): pass # testy print(suma_kwadratow(123)) print(suma_kwadratow(14)) print(suma_kwadratow(17))
Wynikiem funkcji suma_kwadratow(89) jest 145
testResult = suma_kwadratow(89) == 145
145
suma_kwadratow(89)
Wynikiem funkcji suma_kwadratow(145) jest 42
testResult = suma_kwadratow(145) == 42
42
suma_kwadratow(145)
Wynikiem funkcji suma_kwadratow(42) jest 20
testResult = suma_kwadratow(42) == 20
20
suma_kwadratow(42)
Wynikiem funkcji suma_kwadratow(20) jest 4
testResult = suma_kwadratow(20) == 4
4
suma_kwadratow(20)
Rozwiąż ćwiczenie

Pytania quizoweBadanie własności liczb całkowitych

Twój wynik to: /3
  • Co określa czasowa złożoność obliczeniowa?
  • W jakim przedziale algorytm optymalny będzie szukał dzielników liczby 10 000?
  • Jak nazywa się algorytm znajdowania liczb pierwszych w podanym zakresie?