Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

23. Arytmetyka

Treści kształcenia. Arytmetyka liczb całkowitych: podzielność, NWD i NWW, algorytm Euklidesa i rozszerzony algorytm Euklidesa, liczby pierwsze i sito Eratostenesa. Kongruencje (arytmetyka modularna), odwrotność modulo nn, małe twierdzenie Fermata i liczby Carmichaela.

Efekty kształcenia. Potrafi wyznaczać NWD, NWW i odwrotności modulo nn (algorytm Euklidesa i jego rozszerzona wersja) oraz wykonywać obliczenia na kongruencjach. Potrafi stosować małe twierdzenie Fermata do wykazywania, że dana liczba jest złożona, i zna ograniczenia tego testu (liczby Carmichaela).

Liczby całkowite

Na tych zajęciach skupimy się na arytmetycznych własnościach liczb całkowitych. W szczególności interesować nas będzie podzielność, związki dodawania z mnożeniem i zastosowania w szczególnych działach informatyki takich jak kryptografia.

Liczby całkowite (jako zbiór) oznaczamy symbolem Z\mathbb{Z}. Zbiór ten zawiera liczby naturalne (z zerem), których zbiór oznaczamy N\mathbb{N}. Liczby całkowite, które nie są naturalne, nazywamy liczbami ujemnymi.

Z={0,1,2,3,…}∪{−1,−2,−3,…}.\mathbb{Z} = \{0,1,2,3,\ldots \}\cup \{-1,-2,-3,\ldots \}.

Na zbiorze liczb całkowitych określamy dwie operacje dodawania (++) i mnożenia (⋅\cdot). Obie te operacje są naturalnym rozszerzeniem analogicznych operacji zdefiniowanych na zbiorze liczb naturalnych.

Wraz z operacjami +,⋅+,\cdot liczby całkowite tworzą pierścień.

Podzielność

Mnożenie liczb całkowitych ma bardzo bogatą strukturę. Przy jego wykonywaniu ważną relacją pomiędzy liczbami całkowitymi jest podzielność.

Definicja

Liczba całkowita aa jest podzielna przez liczbę całkowitą bb, o ile istnieje liczba całkowita cc, które razem spełniają

a=b⋅ca = b\cdot c

Mówimy, że bb jest dzielnikiem liczby aa, gdy zachodzi powyższa relacja. Oznaczamy ją b∣ab\mid a.

Proste wnioski:

  1. Liczba 0 jest podzielna przez dowolną liczbę całkowitą.

  2. Liczba 1 jest dzielnikiem dowolnej liczby całkowitej.

  3. Dla każdej liczby całkowitej aa zachodzi a∣aa\mid a.

  4. Jeśli a∣ba\mid b oraz b∣ab\mid a, wówczas a=ba=b lub a=−ba=-b.

  5. Jeśli a∣ba\mid b i a∣ca\mid c, to a∣(b+c)a\mid (b+c).

Największy wspólny dzielnik

Dla dwóch liczb całkowitych a,ba,b takich, że (a,b)≠(0,0)(a,b)\neq (0,0), największą dodatnią liczbę całkowitą, która dzieli aa oraz bb, nazywamy największym wspólnym dzielnikiem i oznaczamy NWD(a,b)NWD(a,b).

Standardowo przyjmowaną konwencją jest NWD(0,0)=0NWD(0,0) = 0.

Zauważmy, że NWD(a,b)=NWD(a,−b)NWD(a,b) = NWD(a,-b) oraz NWD(a,b)=NWD(b,a)NWD(a,b) = NWD(b,a).

Twierdzenie (Euklides) Niech a,ba,b będą liczbami całkowitymi. Zachodzi równość

NWD(a,b)=NWD(a,a+b)NWD(a,b) = NWD(a,a+b)

W szczególności oznacza to, że dla dowolnej liczby całkowitej kk zachodzi

NWD(a,b)=NWD(a,k⋅a+b).NWD(a,b) = NWD(a,k\cdot a+b).

Mając dane dwie liczby całkowite a,ba,b, takie, że b≠0b\neq 0, istnieje dokładnie jedna para liczb całkowitych q,rq,r spełniająca 0≤r<∣b∣0\leq r <|b| oraz

a=q⋅b+r.a = q\cdot b+r.

Liczbę rr nazywamy resztą z dzielenia liczby aa przez bb.

Algorytm Euklidesa

Powyższe twierdzenie udowodnione przez Euklidesa w księdze VII pozwala nam napisać bardzo prosty i szybki algorytm obliczenia największego wspólnego dzielnika.

Wejście: dwie liczby nieujemne a,ba,b Wyjście: największy wspólny dzielnik a,ba,b.

Algorytm:

  1. Jeśli b=0b=0, zwróć aa i zakończ algorytm.

  2. Niech rr będzie resztą z dzielenia aa przez bb.

  3. Podstaw za aa liczbę bb.

  4. Podstaw za bb liczbę rr.

  5. Wróć do kroku 1.

1

Zadanie 1 (NWD)

Oblicz największy wspólny dzielnik liczb 2100+12^{100}+1 i 2100. Czy do tego celu musisz wyznaczyć wszystkie cyfry dziesiętne obu liczb?

Najmniejsza wspólna wielokrotność

Dla dwóch liczb całkowitych a,ba,b niezerowych najmniejszą dodatnią liczbę całkowitą, która jest podzielna przez aa oraz bb, nazywamy najmniejszą wspólną wielokrotnością i oznaczamy NWW(a,b)NWW(a,b). Liczba taka zawsze istnieje, bo ∣ab∣|ab| jest dodatnią liczbą podzielną przez aa oraz bb. Ponadto jest ona dzielnikiem abab. Zachodzi równość

∣ab∣=NWD(a,b)⋅NWW(a,b).|ab| = NWD(a,b)\cdot NWW(a,b).

Liczby całkowite, dla których NWD(a,b)=1NWD(a,b)=1, nazywamy względnie pierwszymi.

Liczby pierwsze

W zbiorze liczb całkowitych z relacją podzielności ∣\mid wyróżniamy pewien szczególny podzbiór liczb, które mają mało dzielników.

Definicja

Niech nn będzie liczbą całkowitą większą niż 1. Liczba nn jest liczbą pierwszą, gdy jedynymi jej dodatnimi dzielnikami są 1 oraz nn.

Twierdzenie

Niech NN będzie liczbą naturalną. Istnieje algorytm, który zwraca NN różnych liczb pierwszych.

Dowód

Dowód tego twierdzenia można zrealizować na bardzo wiele sposobów. Omówimy sobie jeden, który pochodzi (ponownie) od Euklidesa.

Zaczynamy od N=1N=1. Wówczas liczba 2 jest pierwsza i zwracamy zbiór P1={2}P_{1} = \{2\}.

Dla małych wartości NN możemy poszukiwać kolejnych liczb pierwszych, ale takie przeszukiwanie nie daje gwarancji, że znajdziemy NN liczb pierwszych dla każdego NN.

Zastosujemy następujący trik. Mając dany zbiór PN={p1,…pN}P_{N}= \{p_1,\ldots p_N\} składający się z NN różnych liczb pierwszych, rozważamy liczbę

m=p1⋅…⋅pN+1.m = p_1\cdot\ldots\cdot p_N +1.

Liczba mm jest większa od 1 oraz jest względnie pierwsza z każdą z liczb pip_i. Oznacza to, że albo sama jest liczbą pierwszą, gdy ma dokładnie dwa dodatnie dzielniki, albo jest liczbą złożoną.

Gdy jest liczbą złożoną, wówczas musi mieć dwa nietrywialne dzielniki i postać m=m1⋅m2m= m_1\cdot m_2, gdzie 1<m1,m2<m1 < m_1,m_2 < m. Korzystając z zasady indukcji matematycznej możemy udowodnić, że taki rozkład prowadzi do znalezienia dzielnika pierwszego pN+1p_{N+1} liczby mm. Dzielnik ten (skoro liczby pip_i oraz mm są względnie pierwsze) jest liczbą pierwszą różną od elementów pip_i.

Kładziemy pN+1=mp_{N+1} = m, gdy mm jest pierwsza lub pN+1p_{N+1} jest dowolnym (np. najmniejszym) pierwszym dzielnikiem liczby mm. Tworzymy zbiór

PN+1=PN∪{pN+1}.P_{N+1} = P_{N} \cup \{p_{N+1} \}.
[2, 3, 7, 43, 13, 53, 5, 6221671, 38709183810571, 139, 2801, 11, 17, 5471, 52662739]

Zadanie 2 (podzielność iloczynu przez liczbę pierwszą)

Uzasadnij, że gdy liczba pierwsza pp dzieli iloczyn abab, to dzieli aa lub dzieli bb.

Sito Eratostenesa

Efektywnym sposobem generowania kolejnych liczb pierwszych do zadanego górnego ograniczenia jest tzw. sito Eratostenesa. Jest to algorytm, który dla zadanej na wejściu liczby naturalnej NN zwraca listę wszystkich liczb pierwszych nie większych od NN.

Kroki algorytmu.

  1. Wygeneruj ciąg a=(0,0,1,…,1)a = (0,0,1,\ldots, 1) długości N+2N+2 składający się z dwóch zer i NN jedynek, elementy ciągu oznaczamy aia_i i indeksujemy je liczbami i=0,1,…i=0,1,\ldots.

  2. Ustawiamy pozycję startową t=2t=2.

  3. Jeśli at=1a_t=1, wówczas zwracamy na wyjście element tt, który jest liczbą pierwszą.

  4. We wszystkich pozycjach o indeksach postaci k⋅tk\cdot t wstawiamy liczbę 0.

  5. Zwiększamy wartość indeksu tt o 1.

  6. O ile t≤Nt \leq N, wracamy do kroku 3. W przeciwnym przypadku kończymy algorytm.

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]

Zadanie 2* (wyzwanie)

  1. Uzasadnij, że gdy m∣nm\mid n, to Fm∣FnF_{m}\mid F_{n}.

  2. Uzasadnij, że NWD(Fn,Fm)=FNWD(n,m)NWD(F_n,F_m) = F_{NWD(n,m)}.

  3. (*) Uzasadnij, że dla liczb Fibonacciego FnF_{n} dla n>12n>12 zawsze istnieje liczba pierwsza pp, która dzieli FnF_n, ale nie dzieli FkF_{k} dla żadnego k<nk<n.

Uwaga! Ostatnie zadanie jest twierdzeniem udowodnionym przez R. D. Carmichaela w 1913 roku. Praca zawierająca dowód jest dostępna tutaj.

Przeanalizuj poniższy kod algorytmu, który generuje najmniejsze nowe dzielniki pierwsze pojawiające się w ciągu Fibonacciego.

Uzasadnij, że dla każdej liczby pierwszej p≠5p\neq 5 liczba Fp+1F_{p+1} lub Fp−1F_{p-1} jest podzielna przez pp. W celu lepszego zrozumienia tego zjawiska obejrzyj odcinek serii ,,Numberphile’’ na YouTube.

[3, 5, 2, 13, 7, 17, 11, 89, 233, 29, 61, 47, 1597, 19, 37, 41, 421, 199, 28657, 23, 3001, 521, 53, 281, 514229]

Arytmetyka modularna

Za pomocą relacji podzielności możemy wprowadzić na liczbach całkowitych relację kongruencji. Dwie liczby całkowite a,ba,b przystają do siebie modulo nn, gdy zachodzi podzielność

n∣(a−b).n\mid (a-b).

Wprowadzamy nową notację

a≡b(mod n)a\equiv b (\textrm{mod }n)

Podstawowe własności kongruencji

Relacja ≡\equiv jest relacją równoważności, tj. spełnia trzy warunki

  1. a≡a(mod n)a\equiv a (\textrm{mod }n).

  2. a≡b(mod n)a\equiv b (\textrm{mod }n) implikuje b≡a(mod n)b\equiv a (\textrm{mod }n).

  3. a≡b(mod n)a\equiv b (\textrm{mod }n) i b≡c(mod n)b\equiv c (\textrm{mod }n) implikuje a≡c(mod n)a\equiv c (\textrm{mod }n).

Zadanie 3 (własności kongruencji)

Uzasadnij korzystając z definicji relacji podzielności własności 1−31-3. Udowodnij ponadto

  1. a≡b(mod n)a\equiv b (\textrm{mod }n) i c≡d(mod n)c\equiv d (\textrm{mod }n) implikuje a+c≡b+d(mod n)a+c\equiv b+d (\textrm{mod }n)

  2. a≡b(mod n)a\equiv b (\textrm{mod }n) i c≡d(mod n)c\equiv d (\textrm{mod }n) implikuje ac≡bd(mod n)ac\equiv bd (\textrm{mod }n)

Rozszerzony algorytm Euklidesa

Dla dwóch niezerowych liczb całkowitych a,ba,b istnieją dwie inne liczby całkowite x,yx,y spełniające równanie

ax+by=NWD(a,b).ax+by = NWD(a,b).

Algorytm Euklidesa, którym obliczaliśmy NWD(a,b)NWD(a,b), można rozszerzyć tak, aby wyznaczał liczby x,yx,y. Jego podstawową ideą jest przekształcanie dwóch trywialnych równań

a⋅1+b⋅0=aa\cdot 1+b\cdot 0 = a

oraz

a⋅0+b⋅1=ba\cdot 0+b\cdot 1 = b

poprzez dodawanie ich stronami. Po prawej stronie równania wykonując kroki jak w klasycznym algorytmie Euklidesa otrzymamy finalnie liczby 0 i NWD(a,b)NWD(a,b). Równanie, w którym prawą stroną jest NWD(a,b)NWD(a,b), będzie odpowiadało współczynnikom x,yx,y spełniającym równość a⋅x+b⋅y=NWD(a,b)a\cdot x+b\cdot y = NWD(a,b). Poniżej prezentujemy krótki kod z implementacją.

(1, -65, 56)
1

Zadanie 4

Uzasadnij, że dla dwóch kolejnych liczb Fibonacciego a=Fka=F_{k} oraz b=Fk+1b=F_{k+1} algorytm xyNWD(a,b) zwróci liczby d=1d=1, s=(−1)k⋅Fk−1s=(-1)^k\cdot F_{k-1} oraz t=(−1)k−1⋅Fk−2t=(-1)^{k-1}\cdot F_{k-2}.

Wskazówka 1:

Udowodnij następującą tożsamość

FkFk−1−Fk+1Fk−2=(−1)kF_{k} F_{k-1}- F_{k+1} F_{k-2}= (-1)^k

dla dowolnego k≥2k\geq 2.

Wskazówka 2:

Tożsamość wynika z definicji macierzowej liczb Fibonacciego (+ własności wyznacznika macierzy 2x2).

Wskazówka 3:

Tożsamość można udowodnić korzystając z formuły Bineta.

[True, True, True, True, True, True, True, True]

Rozszerzony algorytm Euklidesa pozwala nam znajdować odwrotności liczb modulo nn. Konkretnie - mając daną liczbę aa oraz względnie pierwszą dodatnią liczbę całkowitą nn, z rozszerzonego algorytmu Euklidesa wynika, że istnieją x,yx,y całkowite spełniające równanie

ax+ny=1ax+ny = 1

Oznacza to, że ax≡1(mod n)ax\equiv 1(\textrm{mod }n). Liczbę xx nazywamy multiplikatywną odwrotnością modulo nn.

Zadanie 5 (odwrotność multiplikatywna)

Znajdź odwrotności multiplikatywne dla liczby 2 modulo n=3,5,7n=3,5,7.

Prawo skracania

Jeśli mamy daną kongruencję ax≡bx(mod n)ax\equiv bx(\textrm{mod }n) i liczby xx oraz nn są względnie pierwsze, wówczas zachodzi kongruencja

a≡b(mod n).a\equiv b(\textrm{mod }n).

Do udowodnienia tej własności wykorzystujemy własność 5. wraz z istnieniem odwrotności modulo nn dla liczby xx.

Małe twierdzenie Fermata

Dla dowolnej liczby całkowitej nn oraz liczby pierwszej pp zachodzi następująca równość

np≡n(mod p).n^p\equiv n(\textrm{mod }p).

Dowód tego interesującego twierdzenia pomijamy.

Zadanie 6 (małe twierdzenie Fermata)

  1. Uzasadnij, że gdy NWD(n,p)=1NWD(n,p)=1, wówczas np−1≡1(mod p)n^{p-1}\equiv 1(\textrm{mod }p).

  2. Uzasadnij (przez kontrapozycję), że jeśli dla dwóch względnie pierwszych liczb n,pn,p nie zachodzi np−1≡1(mod p)n^{p-1}\equiv 1(\textrm{mod }p), to pp nie jest liczbą pierwszą.

  3. Wykorzystaj n=2n=2, aby uzasadnić, że p=1111p=1111 nie jest liczbą pierwszą (użyj 2).

Przy wykonywaniu potęgowania modulo pp najlepszy efekt uzyskamy wykonując redukcję liczby przy każdej operacji potęgowania. Ponadto stosujemy algorytm szybkiego potęgowania!

1024

Fermat spekulował, że liczby postaci 22n+12^{2^n}+1 są pierwsze dla wszystkich nn naturalnych. Sprawdź korzystając z testu Fermata przy podstawie 3, że oprócz czterech pierwszych wartości (które istotnie są pierwsze!) żadna z liczb Fermata dla 1≤n≤121\leq n\leq 12 nie jest liczbą pierwszą.

Czy potrafisz znaleźć wszystkie dzielniki pierwsze tych liczb?

[1, 1, 1, 1, 3029026160, 8752249535465629170, 47511664169441434718291075092691853899, 113080593127052224644745291961064595403241347689552251078258028018246279223993, 13387457852131866017809974335626508736765841341908171621341620739066502578793457441078230804865246011339933833061458906559278633032869468345609327807927612, 146809528970244036024821005514683473483244699825046485942988727983049278671435326268165085575181832374726912946280018892919388962699993405908818784177788470178225764936427450039582955979907044211973217849267621360435307454207055855850222255439616231847463892347771894224104545724927599853426578286430466818141, 30182254562411366016290758815250615385119773900166287071320012103534598658748016249356706212399576409176051623391493996034124229337964810272435823998759626339401861304936841613905227081361815373560623362517120490947404339480460474313332173820677516012404946143838387043195618836260126897873905424390972879492407142873302089766617045846445406669503126391560898750223711517657699612890637345675153011392343307620981019447351020682006327614009099495824926766595975575854120577153137811068800000938167385336783270712238367290842981503683862065572101540670645762238184533792146272643893152798145446980427283893716719008826]

Uwaga!

Istnieją liczby naturalne pp złożone, które spełniają np≡n(mod p)n^p\equiv n(\textrm{mod }p) dla każdej liczby całkowitej nn. Takie liczby nazywamy liczbami Carmichaela.

Zadanie 7 (liczby Carmichaela)

Wyznacz pierwszych 5 liczb Carmichaela.

[561, 1105, 1729, 2465, 2821]

Dodatkowe zadania

  1. Przeanalizuj poniższy algorytm DzienTygodnia wyznaczania dnia tygodnia w kalendarzu gregoriańskim. (0-niedziela, 1- poniedziałek, ...)

  2. Zapoznaj się z metodą walidacji kodu ISBN.

  3. Zapoznaj się z testem pierwszości Millera-Rabina.

  4. Na 15 stycznia 2023 największą znaną liczbą pierwszą jest liczba Mersenna M51=282589933−1M_{51} = 2^{82 589 933} − 1. Przeczytaj o projekcie GIMPS, aby przekonać się, w jaki sposób weryfikuje się pierwszość tak dużych liczb.

  5. Niech pp będzie liczbą pierwszą, dla której p2p^2 dzieli 2p−1−12^{p-1}-1. Przekonaj się, że dla p=1093,3511p=1093, 3511 zachodzi taka własność. Poczytaj o hipotezie, że takich liczb pierwszych ma być nieskończenie wiele.

  6. Rozważ następującą funkcję określoną na zbiorze liczb naturalnych dodatnich

f(n)={n/22∣n3n+12∤nf(n) = \left\{\begin{array}{cc} n/2 & 2\mid n\\ 3n+1 & 2\nmid n \end{array}\right.

Sprawdź dla wszystkich liczb naturalnych mniejszych od 100, że ciąg liczb f(n),f(f(n)),…f(n), f(f(n)), \ldots zawsze trafia do jedynki.

Hipoteza Collatza

Udowodnij, że tak jest dla każdej liczby naturalnej.

3
References
  1. Carmichael, R. D. (1913). On the Numerical Factors of the Arithmetic Forms α n ± β n. The Annals of Mathematics, 15(1/4), 30. 10.2307/1967797