Liczby Pierwsze - algorytmy Zajęcia 5 Liczby pierwsze i złożone Liczba pierwsza (z ang. prime number) – to liczba naturalna, która posiada dokładnie dwa różne dzielniki – liczbę 1 oraz samą siebie. Kilka kolejnych liczb pierwszych: 2, 3, 5, 7, 11, 13, 17, 19, 23, itd. Zbiór wszystkich liczb pierwszych oznacza się symbolem P. Liczby naturalne większe od 1, które nie są pierwsze, nazywa się liczbami złożonymi. Z podanych definicji wynika, że liczby 0 i 1 nie są ani pierwsze, ani złożone. Tw. Każda liczba naturalna większa od 1 daje się jednoznacznie zapisać w postaci iloczynu skończonego niemalejącego ciągu pewnych liczb pierwszych. Twierdzenie to był w stanie udowodnić już Euklides (stworzył niezbędne narzędzia), ale uczynił to dopiero Gauss. Twierdzenie to oznacza, że liczby pierwsze są w pewnym sensie atomami, z których przy pomocy mnożenia zbudowane są pozostałe liczby. Przykład: 120=2*3*4*5 960=2*2*3*4*4*5 Twierdzenie Euklidesa Tw. Zbiór wszystkich liczb pierwszych P jest zbiorem nieskończonym. Dowód: Przypuśćmy, wbrew tezie, że zbiór wszystkich liczb pierwszych P jest zbiorem skończonym. Niech P={p1,p2,…,pn}, gdzie pi, dla i=1,2,…,n, to wszystkie kolejne liczby pierwsze. Rozważmy liczbę: x=p1*p2*…*pn+1. Zauważmy, że: x/pi=p1*p2*…*pi-1*pi+1*…*pn+1/pi dla dowolnego i=1,2,…,n. A zatem x nie dzieli się przez żadną liczbę ze zbioru P. Mamy teraz dwie możliwości: 1) x jest liczbą pierwszą (wtedy jest ona różna od każdej liczby ze zbioru P, bo x>pi dla dowolnego i=1,2,..,n), 2) x nie jest liczbą pierwszą (musi ją zatem dzielić jakaś liczba pierwsza p nie będąca oczywiście w zbiorze P). W każdym przypadku dostajemy dodatkową liczbę pierwszą leżącą poza zbiorem P. A zatem zbiór wszystkich liczb pierwszych P jest zbiorem nieskończonym. Test pierwszości Liczbę n będziemy próbowali dzielić przez kolejne liczby naturalne z przedziału od 2 do n-1. Jeśli któraś z tych liczb będzie dzieliła n bez reszty, to liczba n jest liczbą złożoną (zatem nie pierwszą) i algorytm możemy zakończyć z wynikiem negatywnym. Jeśli żadna z liczb od 2 do n-1 nie dzieli liczby n, to n jest liczbą pierwszą. Algorytm kończymy z wynikiem pozytywnym. Zadanie 1 Napisz program realizujący powyższy algorytm. Generowanie wszystkich liczb pierwszych z przedziału [2,n] Zadanie 2 Napisz program realizujący powyższy algorytm. źródło: http://edu.ilo.tarnow.pl/inf/utils/001_2008/0116.php Generowanie kolejnych n liczb pierwszych Zadanie 3 Napisz program realizujący powyższy algorytm. źródło: http://edu.ilo.tarnow.pl/inf/utils/001_2008/0116.php Praca domowa: Zadanie Istnieje prosty sposób poprawiający szybkość sprawdzania, czy dana liczba naturalna n jest pierwsza. A mianowicie, w celu sprawdzenia, czy dana liczba naturalna n jest pierwsza wystarczy dzielić ją przez kolejne liczby naturalne ze zbioru {2,3,…,[sqrt(n)]}, gdzie [sqrt(n)] – to część całkowita z liczby sqrt(n). Napisz program realizujący ten algorytm.