2024. április 25., csütörtök

Gyorskeresés

Prímszám generátor

Írta: |

[ ÚJ BEJEGYZÉS ]

Í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?

Hozzászólások

(#1) Honkydoo


Honkydoo
őstag

:R

"Légy olyan, mint bárki más, tégy olyat, mint senki más."

(#2) veector


veector
senior tag

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?

Ilyet még nem csináltam, de gondolkodtam rajta.
Amire én gondoltam, az úgy működik, mint amikor papíron osztasz (term. számológép nélk.). Szal nem sima osztásjellel hanem külön függvény aminek a bemenete is sztring meg ki is.
Az viszont nem tűnik túl szép és takarékos megoldásnak...

(#3) Gabás


Gabás
addikt

prímszám és prímszámgenerátor
csak mert szúrja

(#4) JColee


JColee
őstag

Ha ezt az algoritmust használod, akkor elég az adott szám gyökéig megvizsgálni az oszthatóságot.

(#5) Brutforsz válasza JColee (#4) üzenetére


Brutforsz
aktív tag

Egyetértek.

Még azt is kihasználhatod gyorsítás céljára, hogy a páros számokat (természetesen a 2 kivételével) nem szükséges vizsgálnod.

Te sejted, kik vagyunk, mi tudjuk, ki vagy.

(#6) JColee válasza veector (#2) üzenetére


JColee
őstag

C++ban csak be kell vezetni egy saját adattípust, túlterhelni a szükséges operátorokat, és bumm így lett a chocapic.

[ Szerkesztve ]

(#7) veector válasza JColee (#6) üzenetére


veector
senior tag

hmm
úgykönnyű :D

(#8) Honkydoo válasza Gabás (#3) üzenetére


Honkydoo
őstag

Köszi javítva!

"Légy olyan, mint bárki más, tégy olyat, mint senki más."

(#9) Armahun


Armahun
addikt

Nem kell túl nagy számokkal dolgozni, az eddig talált legnagyobb prim csak kb 9800000 számjegyből áll :)

Ha szerinted egy tárgy lehet Ő, akkor te is az vagy. Jó étvágyat evés előtt illik kívánni. A már evő embert ezzel étkezévében megszakítani igen nagy illetlenség.

(#10) Honkydoo válasza JColee (#4) üzenetére


Honkydoo
őstag

#4: Hmm, oké

#6:
Túlterhelés? Létezik erre valami leírás?

"Légy olyan, mint bárki más, tégy olyat, mint senki más."

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.