Matematyka Dyskretna. Andrzej Szepietowski. 17 marca 2003 roku

Podobne dokumenty
Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Arytmetyka. Arytmetyka. Magdalena Lemańska. Magdalena Lemańska,

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Wstęp do informatyki- wykład 1 Systemy liczbowe

Systemy zapisu liczb.

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Luty 2001 Algorytmy (7) 2000/2001

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Systemy liczbowe używane w technice komputerowej

Podstawy Informatyki dla Nauczyciela

Metoda znak-moduł (ZM)

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

1.1. Pozycyjne systemy liczbowe

Pracownia Komputerowa wykład IV

Matematyka dyskretna Arytmetyka

Wstęp do informatyki- wykład 1

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

Kod U2 Opracował: Andrzej Nowak

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

1259 (10) = 1 * * * * 100 = 1 * * * *1

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Wstęp do informatyki- wykład 2

Algorytmy i struktury danych. Wykład 4

Podstawy Informatyki

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Arytmetyka liczb binarnych

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Pracownia Komputerowa wyk ad IV

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Teoretyczne Podstawy Informatyki

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Technologie Informacyjne

Zapis liczb binarnych ze znakiem

SYSTEMY LICZBOWE 275,538 =

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Pozycyjny system liczbowy

Ćwiczenie nr 1: Systemy liczbowe

WYRAŻENIA ALGEBRAICZNE

Operacje arytmetyczne

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

1. Operacje logiczne A B A OR B

Systemy liczbowe. 1. System liczbowy dziesiętny

System Liczbowe. Szesnastkowy ( heksadecymalny)

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

MNOŻENIE W SYSTEMACH UZUPEŁNIENIOWYCH PEŁNYCH (algorytm uniwersalny)

Arytmetyka stałopozycyjna

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

Przykładowe zadania z teorii liczb

Pracownia Komputerowa wykład VI

Kodowanie informacji. Kody liczbowe

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Matematyka Dyskretna Zestaw 2

Dodawanie liczb binarnych

Wymagania edukacyjne z matematyki dla uczniów klasy VII szkoły podstawowej

2.3. Wyznaczanie wartości wielomianu, pozycyjne systemy liczbowe i reprezentacja danych liczbowych w komputerze

KOŁO MATEMATYCZNE LUB INFORMATYCZNE - klasa III gimnazjum, I LO

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Systemy liczbowe. System dziesiętny

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2

L6.1 Systemy liczenia stosowane w informatyce

Wymagania edukacyjne z matematyki dla klasy VII

Pracownia Komputerowa wykład V

LICZBY ZMIENNOPRZECINKOWE

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

1. A 2. A 3. B 4. B 5. C 6. B 7. B 8. D 9. A 10. D 11. C 12. D 13. B 14. D 15. C 16. C 17. C 18. B 19. D 20. C 21. C 22. D 23. D 24. A 25.

Moduł 2 Zastosowanie systemów liczbowych w informacji cyfrowej

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1

Pracownia Komputerowa wyk ad VI

Wprowadzenie do informatyki - ć wiczenia

Operacje arytmetyczne w systemie dwójkowym

PRZELICZANIE JEDNOSTEK MIAR

Stan wysoki (H) i stan niski (L)

...o. 2. ZARYS ORGANIZACJI MASZYNY TYPOWEJ

CIĄGI wiadomości podstawowe

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Transkrypt:

Matematyka Dyskretna Andrzej Szepietowski 17 marca 2003 roku

Rozdział 1 Arytmetyka 1.1 System dziesiętny Najpowszechniej używanym sposobem przedstawiania liczb naturalnych jest system dziesiętny, gdzie na przykład zapis: 178 przedstawia liczbę składającą się z jednej setki, siedmiu dziesiątek i ośmiu jedności. Możemy to zapisać w postaci: 178 = 1 100 + 7 10 + 8 1, albo inaczej: 178 = 1 10 2 + 7 10 1 + 8 10 0. Tak więc w systemie dziesiętnym kolejne cyfry oznaczają współczynniki przy kolejnych potęgach liczby dziesięć, zaczynając od największej, a kończąc na najmniejszej potędze. Mówimy, że liczba dziesięć jest podstawą lub bazą systemu dziesiętnego. W systemie dziesiętnym używamy dziesięciu cyfr: a zapis: oznacza liczbę: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, d r d r 1... d 1 d 0 d r 10 r + d r 1 10 r 1 +... + d 1 10 1 + d 0 10 0, (1.1) którą możemy też zapisać w postaci: r d i 10 i, (1.2) i=0 3

4 Rozdział 1. Arytmetyka gdzie d i są cyframi należącymi do zbioru {0,..., 9}. Liczby można też zapisywać w systemach z inną bazą. Jeżeli za bazę systemu wybierzemy liczbę b, to potrzebujemy b cyfr, a zapis: d r d r 1... d 1 d 0 oznacza w systemie z bazą b liczbę: d r b r + d r 1 b r 1 +... + d 1 b 1 + d 0 b 0, (1.3) którą możemy też zapisać w postaci: r d i b i. (1.4) i=0 1.2 System dwójkowy W informatyce bardzo ważnym systemem jest system dwójkowy (binarny), gdzie podstawą jest liczba 2 i gdzie mamy tylko dwie cyfry, 0 i 1 (cyfry w systemie dwójkowym nazywa się bitami). Zapis: d r d r 1... d 1 d 0 oznacza liczbę: lub: d r 2 r + d r 1 2 r 1 +... + d 1 2 1 + d 0 2 0 r d i 2 i. i=0 Przykład 1.1 Zapis 110 oznacza w systemie dwójkowym liczbę: 1 2 2 + 1 2 1 + 0 2 0, czemu w systemie dziesiętnym odpowiada 4 + 2 = 6. Podobnie zapis: 1101101 oznacza w systemie dziesiętnym liczbę 64 + 32 + 8 + 4 + 1 = 109. Poniżej w pierwszej tabeli przedstawiono siedemnaście kolejnych liczb w postaci dwójkowej i dziesiętnej, a w drugiej jedenaście pierwszych potęg liczby 2 w postaci dwójkowej i dziesiętnej.

1.3. Zwiększanie liczby o jeden 5 dwójkowy dziesiętny 0 0 1 1 10 2 11 3 100 4 101 5 110 6 111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 10000 16 potęga dwójkowy dziesiętny 0 1 1 1 10 2 2 100 4 3 1000 8 4 10000 16 5 100000 32 6 1000000 64 7 10000000 128 8 100000000 256 9 1000000000 512 10 10000000000 1024 1.3 Zwiększanie liczby o jeden Algorytm zwiększania liczby o jeden. Aby zwiększyć o jeden liczbę zapisaną w systemie dwójkowym: wskazujemy na ostatni bit, powtarzamy, co następuje: jeżeli wskazany bit jest zerem, to zamieniamy go na jedynkę i kończymy algorytm, jeżeli jest on równy jeden, to zamieniamy go na zero i wskazujemy następny bit w lewo; jeżeli nie ma następnego bitu w lewo, to stawiamy jedynkę na początku liczby i kończymy algorytm.

6 Rozdział 1. Arytmetyka Mówiąc inaczej, szukamy pierwszego zera od prawej strony, zamieniamy go na jedynkę, a wszystkie jedynki stojące za nim zamieniamy na zera. Przykład 1.2 Liczba o jeden większa od liczby 100100111 to 100101000. Jeżeli liczba nie zawiera zer, tylko same jedynki, to zamieniamy te jedynki na zera i stawiamy jedynkę na początku. Przykład 1.3 Po liczbie 11111 jest liczba 100000. Zauważmy, że podobnie działa algorytm zwiększania o jeden liczb w systemie dziesiętnym (lub dowolnym innym systemie). Szukamy pierwszej od prawej cyfry różnej od dziewiątki (największej cyfry w systemie), zwiększamy tę cyfrę o jeden, a wszystkie stojące za nią dziewiątki zamieniamy na zera. 1.4 Porównywanie liczb Algorytm porównywania liczb. Aby stwierdzić, która z dwóch liczb w postaci dwójkowej jest większa, postępujemy w następujący sposób: jeżeli zapisy liczb nie są tej samej długości, to większą jest liczba z dłuższym zapisem (zakładamy tu, że zapis liczby różnej od zera nie ma zer na początku), jeżeli zapisy liczb są równej długości, to porównujemy bit po bicie od lewej strony do prawej: jeżeli bity są takie same, to przechodzimy do następnego bitu w prawo, jeżeli bity są różne, to kończymy i stwierdzamy, że większa jest ta liczba, która ma większy bit na tej pozycji, jeżeli wszystkie bity są takie same, to porównywane liczby są równe. Przykład 1.4 1011010 > 1010101. Liczby te sa tej samej długości, maja takie same trzy pierwsze bity, a różnia się dopiero czwartym bitem czwarty bit pierwszej liczby jest większy od czwartego bitu drugiej liczby. 1.5 Operacje arytmetyczne w systemie dwójkowym Operacje dodawania, mnożenia, odejmowania i dzielenia w systemie dwójkowym można wykonywać podobnie do tak zwanych szkolnych pisemnych działań arytmetycznych w systemie dziesiętnym. Działania w systemie dwójkowym są prostsze, ponieważ mamy tu tylko dwie cyfry, 0 i 1, i prostsze są operacje na pojedynczych cyfrach. Zacznijmy od tabliczki dodawania i mnożenia. Wyglądają one tak: + 0 1 0 0 1 1 1 10 * 0 1 0 0 0 1 0 1

1.5. Operacje arytmetyczne w systemie dwójkowym 7 Przypuśćmy, że chcemy dodać dwie liczby w postaci dwójkowej. Zakładamy tu, że obie liczby są tej samej długości. Jeżeli nie są, to krótszą z nich uzupełniamy na początku zerami. Algorytm dodawania. Aby dodać dwie liczby w postaci binarnej: d r d r 1... d 0, e r e r 1... e 0, dla kolejnych pozycji i od 0 do r obliczamy bit sumy s i oraz c i tak zwany bit przeniesienia do następnej pozycji: najpierw obliczamy s 0 oraz c 0 : s 0 = (d 0 + e 0 ) mod 2 (s 0 jest resztą z dzielenia d 0 + e 0 przez 2), c 0 = d 0 e 0, następnie po kolei, dla każdego i od 1 do r, obliczamy: s i = (d i + e i + c i 1 ) mod 2, c i = 1, jeżeli co najmniej dwa spośród bitów d i, e i oraz c i 1 są jedynkami, na końcu obliczamy najbardziej znaczący bit sumy s r+1 = c r. Wynikiem dodawania jest liczba (może się zdarzyć, że s r+1 = 0). s r+1 s r... s 0 Przykład 1.5 Dodawanie liczb 10101 i 111 wyglada następująco: 1 0 1 0 1 + 1 1 1 1 1 1 0 0 Aby odjąć od siebie dwie liczby w systemie dwójkowym, odejmujemy bit po bicie od prawej do lewej, a w przypadku gdy trzeba odjąć bit większy od mniejszego, pożyczamy dwójkę z następnej (w lewo) pozycji (szczegóły algorytmu pozostawiono jako ćwiczenie). Przykład 1.6 Odejmowanie liczb 10101 i 111 wyglada następująco: 1 0 1 0 1 1 1 1 1 1 1 0

8 Rozdział 1. Arytmetyka Aby pomnożyć dwie liczby, mnożymy pierwszą liczbę przez poszczególne cyfry drugiej liczby, a wyniki podpisujemy pod spodem odpowiednio przesunięte względem siebie. Każdy kolejny wynik jest przesunięty o jedną kolumnę w lewo. Następnie sumujemy te iloczyny. Przykład 1.7 Oto przykład mnożenia liczb 10101 i 101: 1 0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 1 1 0 1 0 0 1 Zauważmy, że pomnożenie liczby w postaci dwójkowej przez dwa oznacza dopisanie jednego zera na końcu liczby. Podobnie pomnożenie liczby przez i-tą potęgę dwójki oznacza dopisanie na końcu liczby i zer. Przykład 1.8 1101101 pomnożone przez 1000 daje wynik 1101101000. Również dzielenie wykonuje się podobnie jak w systemie dziesiętnym. Na przykład: 1 0 1 0 1 1 1 0 1 0 0 1 : 1 0 1 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 0 Jeżeli liczba jest podzielna przez dwa, to ma w postaci binarnej zero na końcu, a jeżeli dzieli się przez i-tą potęgę dwójki, to ma na końcu i zer. Podzielenie liczby przez dwa oznacza skreślenie w jej postaci binarnej jednego zera z końca. Przykład 1.9 1010011000 podzielone przez dwa daje 101001100. 1.6 Zamiana systemu Zastanówmy się teraz, jak przechodzić od jednego sposobu przedstawiania liczby do drugiego. Ponieważ będziemy używać różnych systemów zapisu liczb, więc zapis w systemie z bazą b oznaczymy przez: (d r d r 1... d 1 d 0 ) b. Będziemy rezygnować z tego zapisu, jeżeli nie będzie wątpliwości, jakiego systemu używamy. Przedyskutujmy to na przykładach. Aby przedstawić liczbę (110101) 2

1.6. Zamiana systemu 9 w postaci dziesiętnej, korzystamy ze wzoru (1.3): (110101) 2 = 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0, i wykonujemy wszystkie rachunki w systemie dziesiętnym: (110101) 2 = 1 32 + 1 16 + 0 8 + 1 4 + 0 2 + 1 1 = 32 + 16 + 4 + 1 = (53) 10. Podobnie możemy postępować przy zamianie w odwrotną stronę, z systemu dziesiętnego na dwójkowy. Najpierw korzystamy ze wzoru (1.1): (53) 10 = 5 10 1 + 3 10 0, następnie przedstawiamy cyfry i podstawę systemu 10 w postaci dwójkowej i wykonujemy wszystkie działania w systemie dwójkowym: (53) 10 = (101) 2 (1010) 2 + (11) 2 = (110010) 2 + (11) 2 = (110101) 2. Ten sposób zamiany liczb z postaci dziesiętnej na dwójkową jest analogiczny do sposobu, w jaki wyżej zamienialiśmy liczby z postaci dwójkowej na dziesiętną. Byłby to naturalny sposób dla kogoś, kto swobodnie liczy w systemie dwójkowym. Sposób ten ma tę wadę, że wolno działa. Zobaczymy na przykładach dwa szybsze algorytmy zamiany postaci liczby z dziesiętnej na dwójkową. Weźmy liczbę 178. Pierwszy sposób polega na tym, że wyszukujemy największą potęgę liczby 2, która jeszcze jest mniejsza od naszej liczby (w przykładzie 128 = 2 7 ), następnie odejmujemy tę potęgę od naszej liczby i z różnicą postępujemy tak samo. Na końcu mamy liczbę w postaci sumy potęg dwójki. W naszym przykładzie wygląda to tak: 178 = 128 + 50 = 128 + 32 + 18 = 128 + 32 + 16 + 2. Teraz już łatwo zapisać naszą liczbę w postaci dwójkowej: (178) 10 = (10110010) 2. Drugi sposób polega na kolejnym dzieleniu liczby w sposób całkowity przez 2 i zapamiętywaniu reszt z dzielenia. Reszty te zapisane w odwrotnej kolejności tworzą zapis binarny liczby. Na przykład, weźmy znowu liczbę 178. W poniższej tabeli przedstawiono kolejne ilorazy i reszty. liczba iloraz reszta 178 89 0 89 44 1 44 22 0 22 11 0 11 5 1 5 2 1 2 1 0 1 0 1

10 Rozdział 1. Arytmetyka Reszty zapisane w odwrotnej kolejności: 10110010, tworzą binarny zapis liczby (178) 10. Poprawność działania tego algorytmu wynika z faktu, że jeżeli podzielimy liczbę r x = d i 2 i przez 2, to reszta z dzielenia wyniesie d 0, a iloraz całkowitoliczbowy wyniesie: i=0 r d i 2 i 1, i=1 następne dzielenie przez 2 da resztę d 1 oraz iloraz: r d i 2 i 2, i=2 i tak dalej. Ostatni sposób można łatwo uogólnić na algorytm zamiany liczb z systemu dziesiętnego na system z inną bazą b. Należy tylko dzielić przez b. Jeżeli chcemy, na przykład, przedstawić liczbę 60 w systemie trójkowym, to dzielimy ją kolejno przez 3 i spisujemy reszty z dzielenia: liczba iloraz reszta 60 20 0 20 6 2 6 2 0 2 0 2 W wyniku otrzymamy: (60) 10 = (2020) 3. 1.7 Długość liczby Zastanówmy siȩ ile cyfr zawiera zapis dziesiȩtny liczby naturalnej x. Cztery cyfry w systemie dziesiȩtnym posiadaj a liczby od 1000 = 10 3 do 9999 = 10 4 1, a k cyfr posiadaj a liczby od 10 k 1 do 10 k 1. Tak wiȩc liczba x ma k cyfr wtedy i tylko wtedy gdy k 1 log 10 x < k, czyli gdy log 10 x = k 1. Mamy więc Lemat 1.10 Liczba naturalna x ma w systemie dziesiȩtnym log 10 + 1 (w przybliżeniu log 10 x) cyfr. Podobnie w systemie z podstaw a b, liczba x ma k cyfr wtedy i tylko wtedy gdy k 1 log b x < k, czyli:

1.8. Duże liczby 11 Lemat 1.11 W systemie o podstawie b liczba naturalna x ma log b + 1 (w przybliżeniu log b x) cyfr. Korzystaj ac z tego faktu możemy ustalać przybliżon a liczbȩ cyfr potrzebn a do zapisu liczb. Wniosek 1.12 Liczba, posiadaj aca k cyfr w systemie dziesiȩtnym ma około k log 2 10 k 10 3 bitów w systemie dwójkowym, a liczba maj aca k bitów w postaci dwójkowej ma około k 3 10 cyfr w postaci dziesiȩtnej. Dowód: Jeżeli liczba x ma w postaci dziesiętnej k cyfr, to k log 10 x. W postaci dwójkowej x ma około log 2 x bitów, a log 2 x = log 10 x log 2 10 k log 2 10 k 10 3, ponieważ log 10 2 0.301029996 3 10. Podobnie, jeżeli liczba x ma w postaci dwójkowej k bitów, to w postaci dziesiętnej ma około log 10 x = log 10 2 log 2 x k 3 10. 1.8 Duże liczby Aby siȩ zorientować jak duże mog a być liczby przedstawione za pomoc a systemu dziesiȩtnego lub dwójkowego przypatrzmy siȩ poniższej tabeli: Liczba sekund w roku 3 10 7 Wiek układu słonecznego w latach 10 10 Wiek układu słonecznego w sekundach 10 17 Liczba cykli w roku (100 MHz) 3 10 15 Liczba ci agów 64 bitowych 2 64 1.8 10 19 Liczba ci agów 128 bitowych 2 128 3.4 10 38 Liczba ci agów 256 bitowych 2 256 1.2 10 77 Liczba atomów na Ziemi 10 51 Liczba atomów w naszej galaktyce 10 67 Dane do tabeli zaczerpniȩto z ksi ażki A. Menezes, P. van Oorschot and S. Vanstone, Handbook of Applied Cryptography. oraz z ksi ażki B. Schneier, Applied Cryptography. Tabela ta pozwala ocenić niektóre algorytmy. Przykład 1.13 Rozważmy prosty algorytm sprawdzaj acy, czy liczba naturalna x jest pierwsza. Algorytm ten dzieli x przez kolejne liczby od 2 do x. Jeżeli x ma 120 bitów, to potrzeba 2 60 10 18 dzieleń. Jeżeli założymy, że komputer potrafi wykonać 100 milionów dzieleń w ci agu sekundy i 3 10 15 w ci agu roku, to bȩdzie liczył około 300 lat. W rozdziale o teorii liczb bȩdziemy mówić o szybszych algorytmach sprawdzaj acych pierwszość liczb maj acych po kilkaset bitów. Przykład 1.14 Przypuśćmy, że chcemy zaprojektować tablicȩ, która dla każdego ci agu złożongo z ośmiu liter przechowuje jak aś informacjȩ (jeden bajt). W przypadku 26 liter takich ci agów mamy 26 8 = 10 8 log 10 26 = 10 8 1.41 > 10 11, zatem potrzebowalibyśmy wiȩcej niż 100 gigabajtów pamiȩci.

12 Rozdział 1. Arytmetyka 1.9 Ułamki Przypomnijmy najpierw krótko, jak przedstawia się ułamek w systemie dziesiętnym. Na przykład, 0.234 oznacza: 2 10 1 + 3 10 2 + 4 10 3. Użyliśmy kropki do oddzielania części całkowitej od ułamkowej. Jest to często używany w informatyce sposób, stosowany między innymi w języku Pascal. Ogólniej, zapis: oznacza liczbę: którą możemy też zapisać w postaci: 0.d 1 d 2... d r d 1 10 1 + d 2 10 2 +... + d r 10 r, r d i 10 i. i=1 Podobnie możemy zapisywać ułamki w systemie dwójkowym. Jedyna różnica polega na tym, że w systemie binarnym podstawą potęg jest dwójka i że używamy tylko dwóch cyfr, 0 i 1. Tak więc w systemie dwójkowym zapis: 0.d 1 d 2... d r oznacza liczbę: lub inaczej: Przykład 1.15 d 1 2 1 + d 2 2 2 +... + d r 2 r, r d i 2 i. i=1 (0.1) 2 = (0.5) 10, (0.11) 2 = (0.75) 10, (0.101) 2 = (0.625) 10. W poniższej tabeli przedstawiono kilka pierwszych ujemnych potęg liczby 2 w systemie dwójkowym i dziesiętnym. 2 1 (0.1) 2 (0.5) 10 2 2 (0.01) 2 (0.25) 10 2 3 (0.001) 2 (0.125) 10 2 4 (0.0001) 2 (0.0625) 10 2 5 (0.00001) 2 (0.03125) 10 2 6 (0.000001) 2 (0.015625) 10

1.10 System szesnastkowy 1.10. System szesnastkowy 13 W informatyce używa się też systemu szesnastkowego, gdzie podstawą jest liczba 16. Do systemu szesnastkowego potrzebujemy szesnastu cyfr. Zwykle używa się następujących cyfr : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. W poniższej tabeli zestawiono cyfry systemu szesnastkowego z odpowiadającymi im liczbami w systemie dwójkowym i dziesiętnym. szesnastkowy dwójkowy dziesiętny 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 A 1010 10 B 1011 11 C 1100 12 D 1101 13 E 1110 14 F 1111 15 W języku Pascal liczby w systemie szesnastkowym poprzedza się znakiem dolara $, a w języku C znakami 0x. Przykład 1.16 Zapis $A1 oznacza liczbę w systemie szesnastkowym, która w systemie dziesiętnym ma postać $A1 = 10 16 + 1 = (161) 10 Dzięki temu, że 16 jest potęgą dwójki, prosta jest zamiana postaci liczby z systemu dwójkowego na szesnastkowy, i na odwrót. Przy zamianie z systemu szesnastkowego na dwójkowy wystarczy zamieniać kolejne cyfry przedstawienia na grupy odpowiednich czterech bitów według powyższej tabeli. Przykład 1.17 Liczba, która w systemie szesnastkowym wyglada tak $A91 w systemie dwójkowym ma postać 1010 1001 0001. Przy zamianie z postaci dwójkowej na postać szesnastkową postępujemy odwrotnie. Zastępujemy grupy po cztery bity pojedynczymi cyframi. Przykład 1.18 (1110 0011 1011 0000) 2 = $E3B0.

14 Rozdział 1. Arytmetyka Jeżeli liczba cyfr w postaci dwójkowej nie dzieli się przez 4, to uzupełniamy ją zerami na początku. Przykład 1.19 (110 1111 0110 0010) 2 = (0110 1111 0110 0010) 2 = $6F 62. W ten sposób możemy używać zapisu szesnastkowego do zwięzłego przedstawiania długich ciągów bitów. 1.11 Reprezentacja liczb w komputerze W wielu językach każda zmienna ma swój typ, który jest deklarowany na początku programu. Sposób przechowywania wartości zmiennej zależy od jej typu. 1.11.1 Integer Zmienne typu integer przechowywane są zwykle w dwóch bajtach. Jeden bajt (ang. byte) zawiera osiem bitów, tak więc wartość zmiennej typu integer przechowywana jest w szesnastu bitach. Pierwszy bit oznacza znak. Jeżeli jest on zerem, to liczba jest dodatnia, jeżeli jedynką, to ujemna. Jeżeli liczba jest dodatnia, to pozostałe piętnaście bitów stanowi binarny zapis tej liczby. Na przykład liczba 15 jest przechowywana jako: 0000 0000 0000 1111. Największą liczbę dodatnią, jaką można przechować w zmiennej typu integer, jest: czyli zero i piętnaście jedynek. Jest to: 0111 1111 1111 1111, 2 15 1 = (32767) 10. Liczby ujemne są przechowywane w tak zwanym systemie uzupełnieniowym. Liczba ujemna o wartości bezwzględnej x jest przedstawiana jako liczba: 2 16 x w postaci binarnej. Na przykład liczba 1 jest przedstawiona jako: czyli szesnaście jedynek. A liczba 3 jako: 1111 1111 1111 1111, 1111 1111 1111 1101. Najmniejsza liczba ujemna, którą można zmieścić do zmiennej typu integer, to: 1000 0000 0000 0000,

1.11. Reprezentacja liczb w komputerze 15 czyli jedynka i piętnaście zer, która koduje liczbę: 2 15 = ( 32768) 10. Często nie ma żadnego zabezpieczenia przed przekroczeniem maksymalnego lub minimalnego zakresu liczb typu integer. Jeżeli, na przykład, do liczby 32767, która jest przechowywana jako: 0111 1111 1111 1111, dodamy jedynkę, to otrzymamy: 1000 0000 0000 0000, która koduje liczbę 32768, i komputer nie zakomunikuje tego przekroczenia. 1.11.2 Real Liczby typu real są zapisywane w dwóch notacjach: stałopozycyjnej, zmiennopozycyjnej. Liczby w notacji stałopozycyjnej to, na przykład: 0.10, 11.023, 12.0, czyli notacja dziesiętna. Zwróćmy uwagę, że kropka oddziela część całkowitą liczby od części ułamkowej. W notacji zmiennopozycyjnej liczba przedstawiona jest w postaci: mec, gdzie m jest mantysa, liczbą w postaci dziesiętnej z przedziału 1 m < 10 lub 10 < m 1, a c, zwana cecha, jest liczbą całkowitą. Zapis mec oznacza liczbę: m 10 c. W poniższej tabeli mamy kilka liczb w postaci stało- i zmiennopozycyjnej. 4837.92 4.83792E3 0.034 3.4E 2 12.0 1.2E1 Sposób przechowywania wartości zmiennych typu real jest skomplikowany i nie będzie przedstawiony szczegółowo.

16 Rozdział 1. Arytmetyka 1.11.3 Inne typy całkowite W języku Pascal, oprócz integer, można używać innych typów całkowitych; są to: shortint, zawiera liczby całkowite z przedziału od 128 do 127, byte, zawiera liczby całkowite z przedziału od 0 do 255, word, zawiera liczby całkowite z przedziału od 0 do 65535, longint, zawiera liczby całkowite z przedziału od 2147483648 do 2147483647. Elementy typu byte i shortint przechowywane są w jednym bajcie (osiem bitów) pamięci, typu word w dwóch bajtach, a typu longint w czterech bajtach pamięci. Liczby typu shortint i longint mogą być dodatnie lub ujemne i są zapamiętywane w postaci uzupełnieniowej z pierwszym bitem oznaczającym znak (podobnie jak liczby typu integer). Elementy typu byte i word mogą być tylko dodatnie i są przechowywane w postaci dwójkowej. 1.12 Wyrażenia arytmetyczne w języku Pascal W języku Pascal wyrażeniami arytmetycznymi są stałe liczbowe, na przykład: 234, 123, 0.123, 23.45, 3.21E 5, oraz zmienne typów liczbowych (np. integer lub real). Wyrażenia można także budować za pomocą operatorów arytmetycznych i nawiasów. Jeżeli U oraz W są dwoma wyrażeniami arytmetycznymi, to wyrażeniami arytmetycznymi są także: U+W, U-W, U*W, U/W, (U), U div V, U mod V. Gwiazdka reprezentuje tutaj znak mnożenia, a operacje div oraz mod to iloraz i reszta z dzielenia całkowitoliczbowego (są one opisane dokładnie w rozdziale o teorii liczb). Na przykład, wyrażeniami arytmetycznymi są: -(2-3)/2+7*4, (2-3)/(3*2), 7 div 2, 7 mod 2. Jeżeli x oraz y są zmiennymi liczbowymi, to wyrażeniami arytmetycznymi są także: 2*x, x*x-2/y. Dla danego wyrażenia możemy obliczyć jego wartość. Robi się to według zwykłych reguł znanych ze szkoły. Najpierw oblicza się wyrażenia w nawiasach, potem mnożenie i dzielenie (od lewej do prawej), a na końcu dodawanie i odejmowanie (od lewej do prawej). 1.13 Poszukiwania binarne (binary search) Znana jest gra w dwadzieścia pytań. W tej grze za pomocą dwudziestu pytań, na które odpowiedzią może być tak lub nie, należy odgadnąć pomyślaną przez przeciwnika rzecz. Zobaczymy, jak można wykorzystać binarny system zapisu liczb do opracowania strategii wygrywającej w tej grze.

1.13. Poszukiwania binarne (binary search) 17 Uprośćmy nieco tę grę. Załóżmy, że możemy zadać tylko trzy pytania i że odgadujemy liczbę naturalną x ze zbioru: A = {0, 1, 2, 3, 4, 5, 6, 7}. Aby odgadnąć liczbę należy postępować w następujący sposób: Najpierw dzielimy zbiór na połowy: na liczby mniejsze od 4: {0, 1, 2, 3} i na liczby większe lub równe 4: {4, 5, 6, 7} i pytamy, do której połowy należy odgadywana liczba (dokładniej pytamy, czy liczba należy do górnej połowy). Po uzyskaniu odpowiedzi mamy dwa razy węższy przedział poszukiwań i postępujemy z nim podobnie jak w pierwszej turze, dzielimy go na połowy i pytamy, w której połowie jest szukana liczba. Po drugiej odpowiedzi przedział poszukiwań jest już cztery razy krótszy i zawiera dwie liczby. W trzecim pytaniu, znowu dzielimy przedział na polowy i pytamy, w której połowie znajduje się szukana liczba. Po trzeciej odpowiedzi przedział poszukiwań jest już osiem razy krótszy od wyjściowego i zawiera jedną liczbę, która jest tą szukaną. Prześledźmy ten algorytm w przypadku, gdy szukaną liczbą x jest 5. Po odpowiedzi na pierwsze pytanie wiemy, że x jest w zbiorze {4, 5, 6, 7}. W drugiej rundzie dzielimy ten zbiór na połowy: {4, 5} oraz {6, 7} i pytamy, czy x jest w górnej połowie. Po negatywnej odpowiedzi wiemy, ze x jest w {4, 5}. W trzeciej rundzie pytamy, czy x = 5. Strategię gry w trzy pytania można przedstawić za pomocą ukożenionego drzewa, patrz rysunek 1.1. Grę rozpoczynamy w korzeniu (wierzchołku z etykietą λ). Z tym wierzchołkiem związany jest cały zbiór {0, 1, 2, 3, 4, 5, 6, 7}. Z synami korzenia związane są połówki tego zbioru, z wierzchołkiem 1 związany jest zbiór {4, 5, 6, 7}, a z wierzchołkiem 0 zbiór {0, 1, 2, 3}. Jeżeli po odpowiedzi na pierwsze pytanie dowiemy się, że szukana liczba jest w górnej połowie, to przechodzimy do wierzchołka 1, w przeciwnym przypadku przechodzimy do 0. Ogólnie, jeżeli z wierzchołkiem v z etykietą ω związany jest zbiór A ω i ten zbiór ma więcej niż jeden element, to prawy syn wierzchołka v ma etykietę ω1 i jest z nim związana górna połowa zbioru A ω, a lewy syn ma etykietę ω0 i jest z nim związana dolna połowa zbioru A ω. Jeżeli w toku gry trafimy do wierzchołka v, to pytamy, czy szukany element znajduje się w górnej, czy w dolnej połowie zbioru A ω i po uzyskaniu odpowiedzi przechodzimy do odpowiedniego syna. Wierzchołek jest liściem, jeżeli związany z nim zbiór ma tylko jeden element. Jeżeli szukanym elementem jest 5, to z wierzchołka λ przejdziemy do wierzchołka 1, potem do 10, a na koniec trafimy do wierzchołka 101, który jest związany ze zbiorem jednoelementowym {5}. Nie jest przypadkiem, że etykieta wierzchołka odpowiada postaci dwójkowej liczby, którą zawiera. Tak dobraliśmy bowiem zbiór wyjściowy A. Możemy powiedzieć, że zawiera on wszytkie liczby trzy bitowe A = {000, 001, 010, 011, 100, 101, 110, 111}.

18 Rozdział 1. Arytmetyka Rysunek 1.1: λ 0 1 00 01 10 11 000 001 010 011 100 101 110 111 Liczby ze zbioru A 1 = {100, 101, 110, 111} związanego z wierzchołkiem 1 mają pierwszy bit równy 1, a liczby ze zbioru A 0 = {000, 001, 010, 011} związanego z wierzchołkiem 0 mają pierwszy bit równy 0, i ogólnie liczby ze zbioru A ω związanego z wierzchołkiem ω mają swoje pierwsze bity równe ω. Na przykład z wierzchołkiem 10 związany jest zbiór A 10 = {100, 101}. Zauważmy także, że kolejne pytania, są pytaniami o koljne bity szukanej liczby. W pierwszym pytaniu pytamy o pierwszy, w drugim o drugi, a w trzecim o trzeci bit szukanej liczby. Oczywiście taka zgodność pomiędzy bitami szukanej liczby i etykietami wierzchołków drzewa nie wystąpi przy innym ponumerowaniu elementów wyjściowego zbioru. Jak zobaczyliśmy trzeba trzy razy kolejno dzielić zbiór na połowy, aby z początkowego zbioru 8 elemntowego dojść na końcu do zbiorów jednoelementowych. A ile trzeba podziałów, jeżeli na początku mamy n = 2 k elementów? Po pierwszym podziale nasz zbiór będzie miał 2 k 1 elementów, po drugim 2 k 2, a po i-tym 2 k i. Jak widać, potrzeba k = log 2 n kolejnych podziałów, aby dojść do zbioru jednoelementowego. Tak więc jeżeli mamy do dyspozycji 20 pytań, to możemy odnaleźć jedną spośród 2 20 liczb całkowitych z przedziału od 0 do 2 20 1 = 1 048 575. 1.13.1 Poszukiwanie pierwiastka Metodę poszukiwań binarnych można zastosować do stwierdzenia, czy jakaś liczba naturalna n jest kwadratem (lub jakąś inną ustaloną potęgą) innej liczby naturalnej. Inaczej, czy istnieje liczba naturalna k taka, że k 2 = n, lub ogólniej, czy istnieje liczba naturalna k taka, że k α = n.

1.14. Zadania 19 Poniżej przedstawiamy taki algorytm. Algorytm ten używa dwoch dodatkowych zmiennych k d i k g, wartości tych zmiennych przybliżają pierwiastek stopnia α z n od dołu i od góry. W trakcie wykonywania algorytmy przybliżeniaa te są coraz lepsze Algorytm sprawdzający, czy dana liczba naturalna n jest potęgą o wykładniku α jakiejś liczby naturalnej. Dane wejściowe: liczba naturalna n. Dane wyjściowe: pierwiastek stopnia α z n, (liczba naturalna m, taka że m α = n) lub informacja, że n nie ma pierwiastka stopnia α. k d := 1 k g := n Powtarzaj aż do skutku: jeżeli k g k d 1, to koniec, n nie ma pierwiastka. j := k d+k g 2 jeżeli j α = n, to koniec, n jest potęgą j. jeżeli j α > n, to k g := j jeżeli j α < n, to k d := j. 1.14 Zadania 1. Zwiększ o jeden następujące liczby: a) (11010011) 2, (111111) 2, (110011011) 2, b) (2012) 3, (10222) 3, c) (2013) 4, (10233) 4. 2. Porównaj następujące pary liczb: a) (110011) 2, (110100) 2, b) (11010) 2, (1110) 2, c) (12121) 3, (12201) 3, d) (33132) 4, (33201) 4. 3. Dodaj (odejmij, pomnóż) następujące pary liczb: a) (110011) 2, (110100) 2 ; b) (11010) 2, (1110) 2 ; c) (11101) 2, (1111) 2. 4. Dodaj w postaci trójkowej liczby (2101) 3 oraz (1212) 3. 5. Napisz dokładny algorytm odejmowania dwóch liczb w postaci dwójkowej. 6. Liczby (81) 10, (126) 10, (200) 10, (257) 10, (258) 10, (1025) 10, (1023) 10 przedstaw w postaci dwójkowej.

20 Rozdział 1. Arytmetyka 7. Jak liczby 4, 20, 4, 20 będą reprezentowane w komputerze jako stałe typu integer (byte, word)? 8. Liczby $B1, $FF przedstaw w postaci dwójkowej i dziesiętnej. 9. Liczby (80) 10, (120) 10 przedstaw w postaci trójkowej. 10. Liczby (10001101) 2, (100101) 2, przedstaw w postaci: a) dziesiętnej, b) szesnastkowej. 11. Ułamki (0.5625) 10, (0.140625) 10 przedstaw w postaci dwójkowej. 12. Ułamki (0.1101) 2, (0.01101) 2, (0.0011) 2 przedstaw w postaci dziesiętnej. 13. Opisz algorytm zamiany ułamka z postaci dziesiętnej na postać dwójkową. 14. Ile maksymalnie pytań z odpowiedziami TAK/NIE trzeba zadać, aby odgadnąć liczbę: a) z przedziału od 0 do 100 000 b) z przedziału od 0 do 1 000 000? 15. Zastosuj algorytm wyznaczania pierwiastków do znalezienia następujących pierwiastków: 2 256, 2 1000, 3 512, 4 256. 16. Sprawdź, czy liczby 111, 1111 są potęgami liczb całkowitych. 1.15 Problem: Waga Wyobraźmy sobie wagę szalkową. Na jednej szalce, lewej, kładziemy jakiś przedmiot do zważenia, a następnie na obu szalkach kładziemy odważniki. Jeżeli waga jest w równowadze, to ważony przedmiot ma wagę równą sumie (nominałów) odważników położonych na prawej szalce minus suma odważników położonych na lewej szalce, obok ważonego przedmiotu. Na przykład, jeżeli na prawej szalce leżą odważniki 2 i 20 gramowe, a na lewej odważniki 4 i 5 gramowe, to przedmiot waży 13 = (20 + 2) (5 + 4) gramów. Interesujące nas pytanie brzmi: jakie powinny być nominały poszczególnych odważników, aby można było zważyć każdy ciężar o wadze od 1 do N, przy jak najmniejszej liczbie odważników. Zakładamy, że ważymy tylko przedmioty o całkowitych wagach. Pokaż, że (1) Za pomocą k odważników można zważyc co najwyżej 3k 1 2 różnych ciężarów. (2) Jeżeli nominały odważników są kolejnymi potęgami trójki, to znaczy c i = 3 i dla 0 i k 1, to za ich pomocą można zważyć każdy (całkowity) ciężar o nominale od 1 do 3k 1 2. (3) Jak należy ułożyć na szalkach odważniki o nominałach 1, 3, 9, 27, aby odważyc ciężar: a) 35, b) 29? (4) Ile potrzeba odważników, aby zważyć każdy ciężar a) od 1 do 100, b) od 1 do 1000?

1.15. Problem: Waga 21 (5) Jak należy ułożyć na szalkach odważniki o nominałach będących potęgami trójki aby odważyc ciężar: a) 50, b) 200, c) 500? Wskazówki: (1) Ponieważ każdy odważnik może się znajdować na prawej lub lewej szalce, lub na stole, to mamy 3 k różnych położeń odważników. Wśród tych położeń jest takie, gdzie wszystkie odważniki leżą na stole (wtedy ważymy zerowy ciężar). Ponadto jeżeli odważniki leżą na szalkach i odważają ciężar W, to zamieniwszy położenia odważników na szalkach (odważniki z lewej przekładamy na prawą szalkę, i na odwrót), będziemy odważać ciężar W. (2) Rozłożenie odważników przy ważeniu ciężaru W odpowiada przedstawieniu W w postaci k 1 W = d i 3 i, (1.5) i=0 gdzie d i { 1, 0, 1}. Aby przedstawić ciężar W w postaci (1.5), najpierw przedstawiamy liczbę W + 3k 1 2 w systemie trójkowym: W + 3k 1 2 = (e k 1... e 1 e 0 ) 3, a następnie od każdej cyfry odejmujemy jedynkę: d i = e i 1.