Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

Podobne dokumenty
Wykresy i interfejsy użytkownika

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Matematyka dyskretna

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Zaawansowane algorytmy i struktury danych

LICZBY PIERWSZE. Jan Ciurej Radosław Żak

Indukcja matematyczna

Liczby pierwsze. Kacper Żurek, uczeń w Gimnazjum nr 1 im. Jana Pawła II w Giżycku.

Pętla for. Wynik działania programu:

Karta pracy do doświadczeń

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

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.

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

Przykładowe zadania z teorii liczb

Wstęp do programowania

Algorytmy w teorii liczb

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

Matematyka Dyskretna Zestaw 2

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

Algorytmy i struktury danych. Wykład 4

Języki i metody programowania

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. (c.d.

Rozmaitości matematyczne. dr Agnieszka Kozak Instytut Matematyki UMCS

Zadanie 2. Obliczyć rangę dowolnego elementu zbioru uporządkowanego N 0 N 0, gdy porządek jest zdefiniowany następująco: (a, b) (c, d) (a c b d)

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p.

Czy liczby pierwsze zdradzą swoje tajemnice? Czy liczby pierwsze zdradzą swoje tajemnice?

6. Liczby wymierne i niewymierne. Niewymierność pierwiastków i logarytmów (c.d.).

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

LISTA 5. C++ PETLE for, while, do while

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Konstrukcje warunkowe Pętle

Wybrane zagadnienia teorii liczb

Podstawy programowania. Podstawy C# Przykłady algorytmów

Algorytm i złożoność obliczeniowa algorytmu

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

PODSTAWY INFORMATYKI wykład 10.

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Złożoność informacyjna Kołmogorowa. Paweł Parys

Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI

KONSPEKT LEKCJI MATEMATYKI DLA KLASY V SZKOŁY PODSTAWOWEJ. Temat: Wyznaczanie liczb pierwszych metodą sita Eratostenesa.

Luty 2001 Algorytmy (4) 2000/2001

Zestaw zadań dotyczących liczb całkowitych

Wokół Problemu Steinhausa z teorii liczb

Wykład 11: Martyngały: Twierdzenie o zbieżności i Hoeffdinga

Twierdzenie Eulera. Kongruencje wykład 6. Twierdzenie Eulera

Zadania do samodzielnego rozwiązania

IV Warsztaty Matematyczne I LO im. Stanisława Dubois w Koszalinie

Indukcja matematyczna. Zasada minimum. Zastosowania.

Kongruencje pierwsze kroki

Technologie informacyjne: Arkusz kalkulacyjny

LICZBY PIERWSZE. 14 marzec Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F.

do instrukcja while (wyrażenie);

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

5. Rekurencja. Przykłady

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Luty 2001 Algorytmy (8) 2000/2001

Informatyka A. Algorytmy

1. Wykład NWD, NWW i algorytm Euklidesa.

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

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

Wykorzystanie rozkładu liczby na czynniki pierwsze

Moneta 1 Moneta 2 Kostka O, R O,R 1,2,3,4,5, Moneta 1 Moneta 2 Kostka O O ( )

Podzielność liczb; iloczyn i suma dzielników

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Uniwersyteckie Koło Matematyczne - Tajemnicza liczba e.

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Algorytm selekcji Hoare a. Łukasz Miemus

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

MATURA Przygotowanie do matury z matematyki

Matematyka dyskretna

Wstęp do programowania

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Chen Prime Liczby pierwsze Chena

Matematyka dyskretna

Ciągi liczbowe. Zbigniew Koza. Wydział Fizyki i Astronomii

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Programowanie Proceduralne

Zapisujemy to symbolicznie jako równość:. Mówimy też, że ciąg posiada granicę niewłaściwą (równą nieskończoności).

Ciągi komplementarne. Autor: Krzysztof Zamarski. Opiekun pracy: dr Jacek Dymel

Indukcja matematyczna

Teoria liczb. Zajmuje się własnościami liczb, wszystkim całkowitych

WHILE (wyrażenie) instrukcja;

Podzielność liczb przez liczby od 2 do 10 WSTĘP CO TO ZNACZY, ŻE LICZBA JEST PODZIELNA PRZEZ INNĄ LICZBĘ? ZASADY PODZIELNOŚCI

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16

Liczby pierwsze. Jacek Nowicki Wersja 1.0

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

VII Olimpiada Matematyczna Gimnazjalistów

Liczby pierwsze. Jacek Nowicki Wersja 0.92

Wstęp do programowania

Program badawczy - poszukiwanie liczb pierwszych za. pomocą komputera.

MADE IN CHINA czyli SYSTEM RESZTOWY

jest ciągiem elementów z przestrzeni B(R, R)

Podstawy programowania w Pythonie

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. W dniu 21 lutego 2013 r. omawiamy test kwalifikacyjny.

Transkrypt:

Wrocław, 28.11.2017 Wstęp do informatyki i programowania: liczby pierwsze Wydział Matematyki Politechniki Wrocławskiej Andrzej Giniewicz

Dzisiaj na zajęciach... Zajmiemy się liczbami pierwszymi... liczby pierwsze, liczba liczb pierwszych, rozkład na czynniki pierwsze, liczby towarzyskie. 1/25

Liczby pierwsze Liczby pierwsze 2/25

Liczba pierwsza Wszyscy wiedzą, ale dla pewności... Liczby pierwsze 3/25

Liczba pierwsza Wszyscy wiedzą, ale dla pewności... Liczba pierwsza, to liczba naturalna, która ma dwa i tylko dwa dzielniki. Liczby pierwsze 3/25

Jak szukać? Załóżmy, że n nie jest liczbą pierwszą (jest liczbą złożoną). Wtedy możemy ją zapisać jako iloczyn n = a b. Załóżmy nie wprost, że a i b są jednocześnie większe od n. Stąd n = a b > n n = n, czyli mamy sprzeczność z założeniem. Oznacza to, że a n lub b n. Liczby pierwsze 4/25

Jak szukać? Załóżmy, że n nie jest liczbą pierwszą (jest liczbą złożoną). Wtedy możemy ją zapisać jako iloczyn n = a b. Załóżmy nie wprost, że a i b są jednocześnie większe od n. Stąd n = a b > n n = n, czyli mamy sprzeczność z założeniem. Oznacza to, że a n lub b n. W szczególności, oznacza to, że liczba złożona n ma dzielnik pierwszy mniejszy lub równy n. Liczby pierwsze 4/25

Sprawdzanie Wystarczy sprawdzić liczby po kolei. def czy_pierwsza ( n ) : i f n < 2: return False k = 2 while k k <= n : i f n%k == 0: return False k += 1 return True Liczby pierwsze 5/25

A co gdy potrzebujemy wielu? Co, gdy potrzebujemy wielu liczb pierwszych, na przykład mniejszych od zadanego n? Liczby pierwsze 6/25

A co gdy potrzebujemy wielu? Co, gdy potrzebujemy wielu liczb pierwszych, na przykład mniejszych od zadanego n? Sprawdzajmy po kolei! Liczby pierwsze 6/25

A co gdy potrzebujemy wielu? Co, gdy potrzebujemy wielu liczb pierwszych, na przykład mniejszych od zadanego n? Sprawdzajmy po kolei! Ile czasu nam to zajmie? Oszacujmy, ile sprawdzeń podzielności wykonujemy... Liczby pierwsze 6/25

A co gdy potrzebujemy wielu? Co, gdy potrzebujemy wielu liczb pierwszych, na przykład mniejszych od zadanego n? Sprawdzajmy po kolei! Ile czasu nam to zajmie? Oszacujmy, ile sprawdzeń podzielności wykonujemy... Do sprawdzenia liczby n, wykonujemy około n sprawdzeń. A ponieważ sprawdzamy wszystkie liczby mniejsze od n, to sprawdzeń jest n k=1 ( 2 k n + 1 2 0.225. 3 2)3 Liczby pierwsze 6/25

Szybciej? Weźmy dowolną liczbę p, wobec tego na pewno 2p, 3p, 4p,... są liczbami złożonymi. Co gdybyśmy zaczęli wykreślać? 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Liczby pierwsze 7/25

Szybciej? Weźmy dowolną liczbę p, wobec tego na pewno 2p, 3p, 4p,... są liczbami złożonymi. Co gdybyśmy zaczęli wykreślać? 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Najpierw 0 i 1 X, X, 2, 3, 4, 5, 6, 7, 8, 9, 10. Liczby pierwsze 7/25

Wykreślamy Weźmy pierwszą niewykreśloną (2) i wykreślmy wielokrotności. X, X, 2, 3, X, 5, X, 7, X, 9, X Liczby pierwsze 8/25

Wykreślamy Weźmy pierwszą niewykreśloną (2) i wykreślmy wielokrotności. X, X, 2, 3, X, 5, X, 7, X, 9, X Teraz 3. X, X, 2, 3, X, 5, X, 7, X, X, X Liczby pierwsze 8/25

Wykreślamy Weźmy pierwszą niewykreśloną (2) i wykreślmy wielokrotności. X, X, 2, 3, X, 5, X, 7, X, 9, X Teraz 3. X, X, 2, 3, X, 5, X, 7, X, X, X I już, zostały liczby pierwsze. Liczby pierwsze 8/25

Wykreślamy Weźmy pierwszą niewykreśloną (2) i wykreślmy wielokrotności. X, X, 2, 3, X, 5, X, 7, X, 9, X Teraz 3. X, X, 2, 3, X, 5, X, 7, X, X, X I już, zostały liczby pierwsze. Ten pomysł nazywa się sitem Eratostenesa. Liczby pierwsze 8/25

Sito Eratostenesa def pierwsze ( n ) : kandydaci = l i s t ( range ( n + 1 ) ) kandydaci [ 0 ] = None kandydaci [ 1 ] = None for x i n kandydaci : i f x i s None : continue i f x x > n : break for y i n range (2 x, n+1, x ) : kandydaci [ y ] = None return [ x for x i n kandydaci i f x i s not None ] http://tinyurl.com/z8z8t7f Liczby pierwsze 9/25

Co dalej Sito pozwala znaleźć liczby pierwsze mniejsze lub równe n, a co, gdy potrzebujemy znaleźć pierwszych N liczb pierwszych? Liczby pierwsze 10/25

Co dalej Sito pozwala znaleźć liczby pierwsze mniejsze lub równe n, a co, gdy potrzebujemy znaleźć pierwszych N liczb pierwszych? Przyda się ograniczenie. Można pokazać, że p n n-ta liczba pierwsza, dla n 6 spełnia nierówność p n < n log(n) + n log(log(n)). Liczby pierwsze 10/25

Co dalej Sito pozwala znaleźć liczby pierwsze mniejsze lub równe n, a co, gdy potrzebujemy znaleźć pierwszych N liczb pierwszych? Przyda się ograniczenie. Można pokazać, że p n n-ta liczba pierwsza, dla n 6 spełnia nierówność p n < n log(n) + n log(log(n)). Ponieważ p 6 = 17, to możemy przyjąć, że p n < max{17, n log(n) + n log(log(n)) }. Liczby pierwsze 10/25

Pierwsze pierwsze from math import log, c e i l def pierwszen ( N ) : N0 = max(17, c e i l (N log (N)+N log ( log (N ) ) ) ) p = pierwsze (N0) return p [ : N] Liczby pierwsze 11/25

Liczba liczb pierwszych Liczba liczb pierwszych 12/25

Liczba liczb pierwszych Liczba liczb pierwszych mniejszych lub równych n jest interesująca z wielu punktów widzenia (na przykład analizy zagadnień z kryptografii). Oznaczamy ją π(n). Liczba liczb pierwszych 13/25

Liczba liczb pierwszych Liczba liczb pierwszych mniejszych lub równych n jest interesująca z wielu punktów widzenia (na przykład analizy zagadnień z kryptografii). Oznaczamy ją π(n). Niestety, nie da się jej wyliczyć analitycznie, choć możemy zrobić len ( pierwsze ( n ) ) Liczba liczb pierwszych 13/25

Liczba liczb pierwszych Liczba liczb pierwszych mniejszych lub równych n jest interesująca z wielu punktów widzenia (na przykład analizy zagadnień z kryptografii). Oznaczamy ją π(n). Niestety, nie da się jej wyliczyć analitycznie, choć możemy zrobić len ( pierwsze ( n ) ) Niestety jeśli chcemy wyliczyć wiele wartości π(n), wyznaczalibyśmy sito wiele razy niepotrzebnie. Liczba liczb pierwszych 13/25

Pomysł Liczba liczb pierwszych zaczyna się od 0 i zwiększa o 1 za każdym razem, gdy natrafimy na liczbę pierwszą. Wobec tego, wygenerujmy liczby pierwsze mniejsze lub równe N i na podstawie tego wyznaczmy wartość funkcji pi(n) dla n = 0,..., N Liczba liczb pierwszych 14/25

Liczba liczb pierwszych def p i (N ) : p = pierwsze (N) wyniki = [ ] y = 0 n = len ( p ) for x i n range (N+ 1 ) : i f y < n and p [ y ] <= x : y += 1 wyniki. append ( y ) return wyniki http://tinyurl.com/zj9coz3 Liczba liczb pierwszych 15/25

Co z tym π? Co ciekawe, dla odpowiednio dużych n, π(n) n log(n), w sensie lim n π(n) n log(n) = 1. Liczba liczb pierwszych 16/25

Rozkład na czynniki pierwsze Rozkład na czynniki pierwsze 17/25

Rozkład na czynniki Rozkład liczby naturalnej n na czynniki pierwsze, to zapisanie jej w postaci n = p a 1 1... pa k k, gdzie p k to liczby pierwsze, natomiast a k to liczby naturalne. Rozkład na czynniki pierwsze 18/25

Rozkład na czynniki Rozkład liczby naturalnej n na czynniki pierwsze, to zapisanie jej w postaci n = p a 1 1... pa k k, gdzie p k to liczby pierwsze, natomiast a k to liczby naturalne. Jak możemy reprezentować rozkład na czynniki? Za pomocą słownika: { p1 : a1, p2 : a2,... } Przykładowo { 2 : 3, 3: 1, 5: 1} To 2 3 3 1 5 1 = 120. Rozkład na czynniki pierwsze 18/25

Jak? Dla liczby n: 1. szukamy liczb pierwszych mniejszych lub równych n, Rozkład na czynniki pierwsze 19/25

Jak? Dla liczby n: 1. szukamy liczb pierwszych mniejszych lub równych n, 2. tak długo, jak liczba jest podzielna przez 2, dzielimy liczbę przez 2 i zwiększamy liczbę dwójek o 1, Rozkład na czynniki pierwsze 19/25

Jak? Dla liczby n: 1. szukamy liczb pierwszych mniejszych lub równych n, 2. tak długo, jak liczba jest podzielna przez 2, dzielimy liczbę przez 2 i zwiększamy liczbę dwójek o 1, 3. powtarzamy dla kolejnych liczb pierwszych, Rozkład na czynniki pierwsze 19/25

Jak? Dla liczby n: 1. szukamy liczb pierwszych mniejszych lub równych n, 2. tak długo, jak liczba jest podzielna przez 2, dzielimy liczbę przez 2 i zwiększamy liczbę dwójek o 1, 3. powtarzamy dla kolejnych liczb pierwszych, 4. na końcu albo zostanie jedynka albo liczba pierwsza. Jeśli została liczba pierwsza, dodajemy ją do listy dzielników. Rozkład na czynniki pierwsze 19/25

Co z tym możemy zrobić? Na przykład odpowiedzieć ile liczba ma dzielników... def i l e _ d z i e l n i k ów( s ł ownik ) : wynik = 1 for x i n s ł ownik. values ( ) : wynik = x+1 return wynik Rozkład na czynniki pierwsze 20/25

... albo znaleźć dzielniki. def l i s t a _ d z i e l n i k ów( s ł ownik ) : def l i s t a ( pary ) : i f not pary : return [ 1 ] ( n, k ) = pary [ 0 ] bez_1 = l i s t a ( pary [ 1 : ] ) wynik = [ ] mnoż nik = n for i i n range ( k ) : wynik += [ x mnoż nik for x i n bez_1 ] mnoż nik = n return bez_1 + wynik return sorted ( l i s t a ( l i s t ( s ł ownik. items ( ) ) ) ) http://tinyurl.com/hpp6c4e Rozkład na czynniki pierwsze 21/25

Liczby towarzyskie Liczby towarzyskie 22/25

Liczby... towarzyskie? Liczby F 1,..., F n są towarzyskie rzędu n, jeżeli: suma dzielników włąściwych liczby F i jest równa liczbie F i+1 dla i = 1,..., n 1, suma dzielników właściwych liczby F n jest równa liczbie F 1, dla żadnego k, 0 < k < n, liczby F 1,..., F k nie są towarzyskie rzędu k. Liczby towarzyskie 23/25

Liczby... towarzyskie? Liczby F 1,..., F n są towarzyskie rzędu n, jeżeli: suma dzielników włąściwych liczby F i jest równa liczbie F i+1 dla i = 1,..., n 1, suma dzielników właściwych liczby F n jest równa liczbie F 1, dla żadnego k, 0 < k < n, liczby F 1,..., F k nie są towarzyskie rzędu k. Liczby towarzyskie rzędu 2 nazywamy zaprzyjaźnionymi, natomiast liczby towarzyskie rzędu 1, doskonałymi. Liczby towarzyskie 23/25

Liczby... towarzyskie? Liczby F 1,..., F n są towarzyskie rzędu n, jeżeli: suma dzielników włąściwych liczby F i jest równa liczbie F i+1 dla i = 1,..., n 1, suma dzielników właściwych liczby F n jest równa liczbie F 1, dla żadnego k, 0 < k < n, liczby F 1,..., F k nie są towarzyskie rzędu k. Liczby towarzyskie rzędu 2 nazywamy zaprzyjaźnionymi, natomiast liczby towarzyskie rzędu 1, doskonałymi. Przykładowo, liczba 6 jest doskonała, ponieważ jej dzielniki właściwe to 1, 2 oraz 3 oraz 1 + 2 + 3 = 6. Liczby towarzyskie 23/25

W następnym odcinku W końcu zajmiemy się sortowaniem. Liczby towarzyskie 24/25

Pytania? Pytania? 25/25