Temat26

background image

Algorytmy na liczbach

Algorytmy na liczbach

naturalnych

naturalnych

Generowanie liczb pierwszych – sito

Generowanie liczb pierwszych – sito

Eratostenesa

Eratostenesa

background image

Sposoby generowania liczb

Sposoby generowania liczb

pierwszych

pierwszych

Podejście naiwne

do

generowania liczb pierwszych

polega

na sprawdzeniu dla każdej liczby wszystkich jej podzielników
większych od 1, a mniejszych od niej samej. Jeżeli liczba nie
posiada takich podzielników, to jest liczbą pierwszą.
Algorytm ten jest algorytmem o złożoności obliczeniowej rzędu

O(n2).

Optymalizacja algorytmu

wynika z faktu, że jeżeli liczba nie

jest podzielna przez żadną liczbę większą od 1, a mniejszą lub
równą swojemu pierwiastkowi kwadratowemu, to na pewno nie
będzie podzielna przez liczby podzielna przez liczby większe od
tego pierwiastka.

Pozwoli to na przyspieszenie algorytmu – złożoność
obliczeniowa będzie rzędu

O(n*n^(1/2)).

background image

generowania liczb pierwszych

generowania liczb pierwszych

podejście naiwne

podejście naiwne

Specyfikacja

Dane

:

n

- liczba naturalna, określająca górną granicę przedziału liczb

naturalnych, w którym wyszukujemy liczb pierwszych

Wynik

:

liczby pierwsze z wyznaczonego przedziału liczby

naturalnych

Krok1

.

Wczytaj liczbę

n.

Krok2

.

Każdą liczbę z przedziału

(2, n)

dzielimy przez kolejne liczby naturalne od

2

do

n-1

. Jeżeli żadna z liczb nie jest dzielnikiem danej liczby tzn. że

analizowana liczba jest liczbą pierwszą, wypisujemy ją.

Krok3

.

Zakończ algorytm.

background image

KROK IV

5>5

Nie

P:=True;

j:=2

krok a)

p and 2< 5

Tak

;

czy 5 mod 2 = 0

Nie

;

j:=2+1;

krok b)

p and 3< 5

TAK

;

Czy 5 mod 3 = 0

Nie

;

j:=3+1;

krok c)

p and 4< 5

TAK

;

Czy 5 mod 4 = 0

Nie

;

j:=4+1;

krok d)

p and 5< 5

NIE

;

Czy P

TAK

;

wypisz 5 i:=5+1;

KROK IV

6>5

TAK

STOP

Schemat blokowy

Schemat blokowy

– podejście naiwne

– podejście naiwne

START

Wprowadź (n)

i:=2;

i>n

P and
j<i

TAK

STOP

NIE

P:=TRUE

j:=2

TAK

i mod j =0

NIE

P

Wypr (i)

TAK

j:=j+1

NIE

P:=FALSE

TAK

n=5; i:=2

KROK I

2>5

Nie

P:=True; j:=2

krok a)

p and 2< 2

Nie

;

czy P

TAK

;

wypisz

2

; i:=2+1;

KROK II

3>5

Nie

P:=True; j:=2

krok a)

p and 2< 3

TAk

;

czy 3 mod 2 = 0

Nie

;

j:=2+1;

krok b)

p and 3< 3

NIE

;

Czy P

Nie

;

wypisz

3

; i:=3+1;

KROK III

4>5

Nie

P:=True;

j:=2

krok a)

p and 2< 4

Tak

;

czy 4 mod 2 = 0

TAK

;

P := FALSE; j:=2+1;

krok b)

p and 3< 4

NIE

;

Czy P

Nie

;

i:=4+1;

NIE

i:=i+1

background image

Zadania

Zadania

Zadanie1

Napisz program wypisujący wszystkie liczby pierwsze z przedziału liczb
naturalnych (1,

n

> korzystając z algorytmu naiwnego.

n

wprowadzamy

z klawiatury.

Zadanie2

Zmodyfikuj kod program z

zadania1

, tak aby sprawdzał tylko, czy liczba

naturalna ma dzielniki

<=

n^(1/2).

Jeżeli nie ma, to traktował taką

liczbę jako liczbę pierwszą i wypisywał ją na ekranie.

background image

Sposoby generowania liczb

Sposoby generowania liczb

pierwszych

pierwszych

cd.

cd.

Algorytm Eratostenesa

- grecki matematyk Eratostenes z

Cyreny, żyjący na przełomie II i III wieku p.n.e. zauważył, że:

liczby niepierwsze są wielokrotnościami kolejnych liczb

pierwszych

(np. 4, 6, 8, 10…są wielokrotnościami 2; natomiast 6,9,12, …
są wielokrotnościami 3 itd.).

Wystarczy więc z tablicy wszystkich liczb naturalnych
wykreślić kolejno wielokrotności 2, z liczb które pozostaną
wykreślić wielokrotności 3, potem wielokrotności 5, potem
wielokrotności liczby 7 itd. Łatwo zauważyć, że wykreślamy
wielokrotności kolejnych już uzyskanych liczb pierwszych.
Liczby, które pozostaną w tablicy są liczbami pierwszymi.
Złożoność obliczeniowa algorytmu jest rzędu

O(n).

background image

Schemat blokowy

Schemat blokowy

– sito Eratostnenesa

– sito Eratostnenesa

START

Wprowadź (n,

sito[2

..n]=true)

i:=2;

s:=round(sqrt(n))

i>s

sito[i]
=true

NIE

TAK

sito[j]:=FALSE

j:=j+i

n=7;

sito[2]=true;
sito[3]=true;

sito[4]=true;
sito[5]=true;

sito[6]=true;
sito[7]=true;

i:=2; s=7^(1/2)

KROK I

2>s

Nie

sito[2]=true

TAK

j:=2+2

krok a)

4<=7

TAK

sito[4]=false; j=4+2=6

krok b)

6<=7

TAK

sito[6]=false; j=6+2=8

krok c)

8<=7

NIE

i:=2+1=3

KROK II

3>s

TAK

Wypisz

2 3 5 7

STOP

TAK

j:=i+i

j<=n

TAK

Wypisz i, gdy sito[i]=true

STOP

NIE

NIE

i:=i+1

background image

Zadania

Zadania

Zadanie1

Napisz program wypisujący wszystkie liczby pierwsze z przedziału liczb
naturalnych (1,

n

> wykorzystując w programie sito Eratostenesa.

n

wprowadzamy z klawiatury.


Document Outline


Wyszukiwarka

Podobne podstrony:
Temat20
temat22 4AGB3WEP2FCF7BIQBHF44QPHBF4ACJOTVT5LNXI
Temat2, Studia, nauka o materiałach
TEMAT2, 1Koncepcja szcz˙˙cia i obowi˙zku w literaturze staropolskiej
TEMAT24, 24
temat29 RVLGFQGQOGANG5XZDVWIH4YV5RJYTGHURPOYEFY
TEMAT26, 26
Temat25
TEMAT2zaoczne
AS temat2 poprawa
temat2, administracja, prawo administracyjne i prawo finansów publicznych
Temat2EPQ-R, Psychologia Osobowości - ćwiczenia
sprawko temat2, AGH, Nowoczesne technologie badania deformacji, Temat2
Temat21
DO DRUKU, temat2

więcej podobnych podstron