Írtam egy prímszám generáló programot c++-ban.
Már régóta tervben volt, csak elfelejtődött..
Használat:
Létre kell hozni egy szöveges fájlt benne az első prímszámmal, és ő utána legenerálja a többit.
Az elv:
A suliban úgy generáltunk prímszámot, hogy végignéztük, hogy a szám osztható e 1-en és önmagán kívül más számokkal. Ha nem akkor ő prímszám.
Ez nagy számoknál hosszadalmas lehet, egy fokkal jobb ha csak a szám feléig megyünk el az oszthatóság vizsgálatában.
Azonban nekem ennyi nem volt elég! Feltaláltam a spanyol viaszt! Mivel az egyen (az egy nem prím) kívül minden szám osztható egy prímszámmal (legrosszabb esetben önmagával), úgy döntöttem elég ha csak a prímszámokkal való osztást vizsgálom. Így gyorsíthatok az eredményen.
Működés:
Egy 3-tól induló végtelen ciklus megnézi, hogy az i osztható e a fájlban lévő, az (i/2)-nél kisebb vagy egyenlő prímszámokkal, (jelen esetben a kettővel), ha nem osztható akkor a számot hozzáfűzi a fájlhoz és megy tovább.
Hibák/Kérdések:
- Eddig a program úgy működik, először olvasásra nyitja meg a fájlt, majd írásra. Létezik olyan megnyitási mód, ami a kettőt egyszerre teljesíti?
- Ha létezik, hogy lehet a fájl mutatót a fájl elejére, majd a végére tenni?
- Van valami mód arra hogy igazán nagy számokat is tudjak vizsgálni? Pl hogy a szám méretének mondjuk csak a memória szabjon határt?
- Létezik olyan prím kereső algoritmus, ami még ennél is hatékonyabb?