szitán Eratosthenes
Szitán Eratosthenes - algoritmus megállapítás minden prímszám akár bizonyos egész Sablon: Math. ami arra vezethető vissza az ókori görög matematikus Eratosphen Kirensky [1]. Mint sok esetben, a neve az algoritmus mond a Működési elve az, hogy van, egy szitán szűrési jelent. ebben az esetben a szűrés az összes számot, kivéve egyszerű. Ahogy keresztül a listát a dátumok a tartózkodás és a felesleges (az úgynevezett alkatrészek) ki vannak zárva.
A név „szita” módszer úgynevezett mert a legenda szerint, Eratosthenes írta a számot a fedélzeten borított viasz és kiszúrt lyuk a helyeken, ahol íródtak összetett szám. Ezért a lemez volt, mint egy szita, amelyen keresztül a „rostált” minden összetett szám, és már csak egyszerű számokat. Eratosthenes adott táblázata prímszám 1000.
Ahhoz, hogy megtalálja az összes prímszám nem nagyobb, mint egy előre meghatározott számú n. következő Eratosthenes módszer, hajtsa végre a következő lépéseket:
- Írja az összes egymást követő egész szám kettő és N (2, 3, 4, ..., n).
- Hagyja, hogy a p változó kezdetben egyenlő két - az első prímszám.
- Áthúzva a listán számok 2p-n számláló lépéseit p (ez lesz a többszöröse p. 2p. 3p. 4p., ...).
- Keresse meg az első nezachorknutoe számot a listán, több mint p. és hozzá egy változó értéke p a szám.
- Ismételje meg a 3. és a 4.-ig lehetséges.
Most minden nezachorknutye számot a listán - ez mind a prímszám 2 és n.
A gyakorlatban az algoritmus javítható az alábbiak szerint. Lépésben 3-as szám, akkor több a szám a kiindulási azonnal a 2-es szám p mert minden összetett szám kisebb, mint amekkora volna át ebben az időben. És ennek megfelelően, akkor megáll az algoritmus, ha p 2 nagyobb lesz, mint n. [2] Továbbá, az összes prímszám (kivéve 2) - páratlan számok, és ezért lehet tekinteni lépéseket 2p. kezdve P 2.
A komplexitás az algoritmus
A komplexitás az algoritmus Műveletek táblázat beindítja a [3].
igazolás komplexitás
ha a kiválasztott Minden prime Ez végrehajtja a belső hurok, amely biztosítja, hogy intézkedéseket. Ezért kell becsülni a következő értéket:Mivel a szám prímszám. kisebb vagy egyenlő , értékelni , és ennek következtében, -th prímszám megközelítőleg egyenlő , az összeg lehet konvertálni:
Itt, a kifejezés az összeg kerül elkülönítésre az első prímszám, hogy megakadályozzák nullával osztani. Most meg kell becsülni az összeget az integrál:
Az eredmény az eredeti összeg:
Egy szigorú bizonyítás (és ad pontosabb becslését, akár állandó tényező) megtalálható a könyvben a Hardy és Wright «Bevezetés a Theory of Numbers» [4].
Optimalizált végrehajtása (kezdve négyzetek) van pszeudokód [5] [6].
Például n = 30
Írunk a természetes számok a sablon: a Math akár Sablon: Math egy sorban:
Az első szám a listán, Sablon: Math - egyszerű. Menjünk egy sor számok, minden szám többszörösei zachorkivaya Sablon: Math (azaz minden második, kezdve Sablon: Math):
Következő nezacherknutoe számok Sablon: Math - egyszerű. Menjünk egy sor számok, minden szám többszörösei zachorkivaya Sablon: Math (azaz minden harmadik kezdetben Sablon: Math):
Következő nezacherknutoe számok Sablon: Math - egyszerű. Menjünk egy sor számok, zachorkivaya minden szám osztható 5 (azaz minden ötödik tól Sablon: Math). És így tovább. D.
Következő nezacherknutoe szám - Sablon: Math. A tér, Sablon: Math - Több Sablon: Math-ti, így ez a munka befejeződött. Minden összetett szám már áthúzott:
módosított vizsgálati módszer a
Korlátlan, fokozatos változását
Ebben a kiviteli alakban, prímszámok kerülnek kiszámításra szekvenciálisan, felső határ nélkül, mint a szám megtalálható a terek között a komponens számok, hogy kiszámítjuk minden egyes elsődleges Sablon: Math. óta négyzet, lépésekben Sablon: Math (vagy páratlan prímszám Sablon: Math) [2]. Meg lehet szimbolikusan a paradigmája az adatáramlást
mellszobor osztók
Rostálni Eratosthenes gyakran összekeverik algoritmusok kiszűri a beállított intervallum összetett szám. tesztelés egyes számban jelölt rendezésével elválasztó. [7]
Széles körben ismert funkciókód David Turner 1975-ben [8] gyakran összetévesztik a szitán Eratosthenes, [7], de valójában ez messze optimális változat több mint elválasztó.
szita Euler
Szita Euler Sablon: AI egy változata a szita Eratosthenes, amelyben minden összetett szám eltávolításra kerül, amint a listából.
Összeállított első jegyzékébe kezdődő szám Sablon: Math. Minden egyes szakaszában az algoritmus az első szám a listán vesszük a következő prímszám, és határozza meg műveit minden számot a listán, hogy a törlésre kijelölt posleduyushego. Ezután kivesszük a lista első számot, és az összes jelölt számokat, és a folyamat ismétlődik újra:
Itt egy példa kezdődő páratlan számok, miután az első szakaszban az algoritmust. Így, miután Sablon: Math -edik szakaszban munkaállomány tartalmazza a számot csak relatív prím az első sablon: Math prímszám (vagyis, a számok nem osztható bármelyik első sablon: Math prímszám), és kezdődik Sablon: Math -edik egyszerű számát. Minden szám a listán, a kisebb tér az első szám prím.
Szita csak páratlan számok
Mivel minden páros számok. kivéve a 2 - komponens, lehetséges, hogy nem dolgoz fel semmilyen módon, még számok és páratlan számok csak találgatni. Először is, ez csökkenti a felére mennyiségű memória szükséges. Másodszor, akkor számának csökkentése által végrehajtott műveleteket algoritmus (kb dupla).
Ezt ki lehet terjeszteni a számok nem relatív prím csak 2 (azaz, páratlan szám), de a 3, 5, és így tovább. D.
Mennyiségének csökkentésére használt memóriát
Eratosthenes algoritmus valóban működik memóriabiteket. Következésképpen tudjuk menteni jelentős memória-felhasználás, miközben Logikai változókat nem tetszik bájt. valamint a bit, azaz bájt memóriát.
Ez a megközelítés - „tömörítési” - megnehezíti a manipuláció ezeket a biteket. Bármely olvasási vagy írási bit lesz néhány számtani műveleteket. De másrészt nagymértékben javítja tömörség a memóriában. Nagy terek fér el a cache memória, amely sokkal gyorsabb, mint a normál, hogy amikor dolgozik egy szegmens általános aránya növekszik.
Szitán Eratosthenes lineáris üzemidő
Ez az algoritmus érzékeli minden Sablon: Math a szegmensben Sablon: Math a minimális prímosztója Sablon: Math.
Is fenntartja a lista az összes prímszám - egy sor Sablon: Math. kezdetben üres. Ennek során az algoritmus, ez a tömb fokozatosan megtelik.
Kezdetben minden értéke: Sablon: Math nullákkal töltjük fel.
Akkor meg kell rendezni a jelenlegi több Sablon: Math Sablon: Math akár Sablon: Math. Nem lehet két esetben:
- Sablon: Math. ez azt jelenti, hogy a szám a Sablon: Math - egyszerű, valamint más alcsoportot nem talált neki.
- Sablon: Math. ez azt jelenti, hogy a jelenlegi több Sablon: Math - vegyületet, és minimális mennyiségű elsődleges osztó Sablon: Math.
Mindkét esetben, a további összehangolás folyamat kezdődik tömb elemeinek Sablon: Math. kellene többszöröse Sablon: Math. és frissíti értékük Sablon: Math. Azonban a fő cél -, hogy megtanulják, hogyan kell csinálni, oly módon, hogy a végén minden, az értéke: Sablon: Math lenne beállítva legfeljebb egyszer.
Azt állítják, hogy ez lehetséges, hogy erre. Úgy véljük, számok formájában sablon: Math. ahol Sablon: Math sorozat megegyezik a prímszámok nem haladja meg a Sablon: Math (csak erre szükség van, amelyek egy listát az összes prímszám).
Minden szám az ilyen típusú letenni az új értéket a Sablon: Math - meg kell ugyanazt a mintát: Math. [9]