1 / 13

Eratostēna siets Pirmskaitļu meklēšanas algoritms

Eratostēna siets Pirmskaitļu meklēšanas algoritms. Daugavpils Valsts ģimnāzija Edgars Pudulis. Teorētiskais materiāls.

vartan
Download Presentation

Eratostēna siets Pirmskaitļu meklēšanas algoritms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Eratostēna sietsPirmskaitļu meklēšanas algoritms Daugavpils Valsts ģimnāzija Edgars Pudulis

  2. Teorētiskais materiāls Eratostēna siets (ES) matemātikā tiek lietots pirmskaitļu noteikšanai. Metode balstās uz principu, kad tiek uzrakstīta skaitļu virkne un tiek svītroti tie elementi, kuri dalās ar iepriekš virknē esošiem pirmskaitļiem. Lai iegūtu precīzu pirmskaitļu virkni, pirmo pirmskaitli izmanto ciparu “2”. Apskatīsim piemēru ar virkni līdz skaitlim 20.

  3. Teorētiskais materiāls • Šajā virknē ir iespējamas tikai divas darbības: • Svītrojam skaitļus, kas dalās ar 2 • Svītrojam skaitļus, kas dalās ar 3 • Kā redzams piemērā ir iegūti visi pirmskaitļi.

  4. Programmas algoritms Internet portālos ir sastopami dažādi ES realizācijas algoritmi. Apskatīsim šādu risinājumu: izmantosim vienu un to pašu masīvu (jauns netiks veidots) un elementiem, kurus ir jāizsvītro, piešķirsim vērtību “0”, līdz ar to masīvā šādas darbības rezultātā paliks nulles un pirmskaitļi, kurus varēs izvadīt uz ekrāna.

  5. Definēsim sekojošus mainīgos: a – veselu skaitļu masīvs līdz 10 000 elementiem; i, j – cikliskie elementi; PP – pēdējais pirmskaitļa kārtas numurs X – elements “starpnieks”, kas algoritma gaitā saturēs atrasto pēdējo pirmskaitli; skaits – definēsim virknes elementu skaitu.

  6. Programmas algoritms Definējam mainīgos Uses crt; var a:array[1..10000] of integer; i,PP,x,j,skaits:longint; Begin clrscr; skaits:=1000; readln; end. Programmas sākums Notīrām ekrānu Definējam elementu skaitu “Noturam” uz ekrāna rezultātus Programmas nobeigums

  7. Programmas algoritms Pievienojam elementus masīvam for i:=1 to skaits do a[i]:=i;

  8. Programmas algoritms Uses crt; var a:array[1..10000] of integer; i,PP,x,j,skaits:longint; Begin clrscr; skaits:=1000; for i:=1 to skaits do a[i]:=i; readln; end.

  9. Programmas algoritms, loģiskā daļa For i:=2 to skaits do Begin if a[i]>0 then begin write(a[i],' '); PP:=i; x:=a[i]; end; for j:=PP to skaits do begin if a[j]>0 then if trunc(a[j]/x)=a[j]/x then a[j]:=0; end; end;

  10. Programmas algoritms, loģiskā daļa Ja masīva elements nav “0”, tad if a[i]>0 then begin write(a[i],' '); PP:=i; x:=a[i]; end; izdrukājam šo elementu uz ekrāna, piešķiram mainīgajam PP šī elementa kārtas numuru, piešķiram mainīgajam X šī elementa vērtību, kas turpmāk tiks izmatota dalīšanai, jeb skaitļu “svītrošanai”

  11. Programmas algoritms, loģiskā daļa Sākam caurskatīt visus skaitļus no pēdējā pirmskaitļa līdz masīva beigām for j:=PP to skaits do begin if a[j]>0 then if trunc(a[j]/x)=a[j]/x then a[j]:=0; end; Ja elements lielāks par “0”, tad pārbaudām vai šis elements dalās ar pēdējo pirmskaitli. Ja dalās bez atlikuma, tad tas nav pirmskaitlis un attiecīgi piešķiram vērtību “0” (“svītrojam”) Funkcija TRUNC noņem skaitļa daļu, kas atrodas aiz komata, piemēram, TRUNC(15,567) = 15.

  12. Programmas algoritms Uses crt; var a:array[1..10000] of integer; i,PP,x,j,skaits:longint; Begin clrscr; skaits:=1000; for i:=1 to skaits do a[i]:=i; For i:=2 to skaits do Begin if a[i]>0 then begin write(a[i],' '); PP:=i; x:=a[i]; end; for j:=PP to skaits do begin if a[j]>0 then if trunc(a[j]/x)=a[j]/x then a[j]:=0; end; end; readln; end.

  13. Paldies par uzmanību!

More Related