Eratostenesen bahea

Zenbaki lehenak aurkitzeko aplikatzen den prozedura. Bi pausotan egiten da: idatzi 2tik n-ra bitarteko zenbaki arruntak ordena gorakorrean, eta ezabatu gabeko lehen zenbakia lehentzat hartu (2a); hurrena zerrendatik 2 zenbakiaren multiploak ezabatu.
Eratostenesen bahe» orritik birbideratua)

Eratostenes-en bahea zenbaki lehenak aurkitzeko algoritmo bat da, emandako n zenbaki arrunt bat baino txikiagoak direnen artean. Lehendabizi, taula bat egiten da 2 eta n arteko zenbaki arruntekin, jarraian multiploak markatzen dira hurrengo ordena jarraituz: 2tik hasita, haren multiplo guztiak markatzen dira, ostean, 3 zenbakiarekin prozedura bera burutzen da eta prozedura errepikatzen da markatuta ez dagoen zenbaki oso guztiekin ere. Markatu gabe geratzen diren zenbakiak lehenak dira. Prozedura hori behin eta berriz errepikatzen da, aurkitutako azken zenbaki lehenaren hurrengo zenbakiaren karratua n baino handiagoa den arte.

Bahetze-prozesua aldatu

Honako adibidearen bidez, 20 baino txikiagoak diren zenbaki lehenak aurkitzeko eman beharreko urratsak azaltzen dira. Algoritmoan zehar zenbakiak bereiztuko dira: lehenak, markatutakoak, markatu gabekoak.

1. Lehenengo urratsa: 2 eta aukeratutako zenbaki arruntaren arteko zenbakiak zerrendatu. Hasteko, zenbaki guztiak markatu gabekoak dira.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

2. Bigarren urratsa: Markatu gabe dagoen lehenengo zenbakia lehentzat hartzen da.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

3. Hirugarren urratsa: Aurreko urratsean aipatutako zenbakiaren multiploak markatzen dira. Markatuak izan diren zenbakiak ez dira zenbaki lehen.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

4. Laugarren urratsa: Markatu gabeko zenbaki txikienaren karratua 20 baino txikiagoa den bitartean, bigarren urratsera bueltatu. Bestela, algoritmoa amaitzen da. Markatu gabeko zenbaki guztiak zenbaki lehenak dira.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


Adibideari dagokionez,   denez, bigarren urratsera bueltatu behar da. Hurrengo iterazioan 5 zenbakia izango da markatu gabeko zenbakirik txikiena, eta 5aren karratua 20 baino handiagoa denez, algoritmoa amaitu eta markatu gabeko zenbaki guztiak lehenak direla esaten da.

Hortaz, aukeratutako tarte horretan algoritmoa aplikatu ostean, 2 eta 20 arteko zenbaki lehenak lortzen dira: 2,3,5,7,11,13,17,19.

Finketa aldatu

Bahetze-prozesuaren finketa egiteko hainbat modu daude. Izan ere, hainbat zenbaki bi aldiz markatzen dira, urrats bat baino gehiagotan zenbaki bera markatzea erabakitzen delako. Aurreko adibidean, 2aren multiploak markatu direnean 4, 6, 8, 10, 12, 14, 16, 18 eta 20 zenbakiak markatu dira. Algoritmoaren hurrengo iterazioan 3aren multiploak markatu dira, hau da, 6, 9, 12, 15 eta 18. Ikusten den bezala, 6 eta 12 zenbakiak bi aldiz markatuak izan dira. Behin baino gehiagotan markatuak izango diren zenbakiak murrizteko modu bat, markatze-prozesua aldiero   zenbakitik hastea da,   izanik k-garren zenbaki lehena. Modu horretan, ez dira bi aldiz markatuko  ra arteko multiploak:  . Adibidean 3aren multiploak markatzea   balioan hasiko genuke; 6 zenbakia bi aldiz markatua izatea ekidingo genuke. Algoritmoa amaituko da   denean, hortik aurrera ez dagoelako markatua izan daitekeen zenbakirik.

Finketa egiteko beste modu bat, algoritmoaren lehen urratsean zenbaki bikoiti guztiak markatzea da, 2 baino handiagoak diren zenbaki bikoitiak ez baitira inoiz zenbaki lehen izango (2 zenbakiak zatitzen dituelako). Behin hori eginda, algoritmoarekin jarraituko litzateke.

Sasikodea aldatu

Sarrera:   zenbaki arrunt bat.

Irteera: Sarrerako zenbakia baino txikiagoak edo berdinak diren zenbaki lehenen multzoa.

  1. 2-tik  -rako zenbaki guztiak idatzi
  2.   indizea 2-tik  -ra arte egin hurrengoa:
    • Baldin   ez bada markatua izan orduan:
      •   indizea  -tik  ra arte, egin hurrengoa:
        •   posizioko zenbakia markatu
  3. Emaitza: markatu gabeko zenbakiak

Notazioa:

  •   zoru-funtzioa da, hau da,   baino txikiagoak diren zenbaki oso guztietan handiena ematen duen funtzioa.
  •   zatiketa da,   zenbakia   zenbakiaz zatitzea.

Algoritmoaren inplementaziorako, normalean   elementuz osatutako bektore bat erabiltzen dira, datu-mota logikoa izanik. Horrela,   posizioan Egiazkoa agertzen bada   markatua izan dela esan nahiko du eta Faltsua izango da kontrako kasuan.


Erreferentziak aldatu

Ikus, gainera aldatu

Kanpo estekak aldatu