Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!
PyCharm-ban prímszámok kiírása másik listába
Nayem{ Informatikus } kérdése
1117
Üdv!
Van egy adott számlista 1-től N-ig:
N = int(input("Meddig: "))
lista = [ ]
for i in range(1, N+1):
lista.append(i)
print(lista) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., N]
Jelenleg 1 felhasználó nézi ezt a kérdést.
python, pycharm, lista, prím
0
Felsőoktatás / Informatika
Válaszok
4
2 hete nem aludtam
válasza
Írsz egy cilust, ami `2`-től `N`-ig megy. Legyen ez a változó `i`.
Ezen a cikluson belül írsz még egy ciklust, ami `2`-től `(i-1)`-ig megy. Ez legyen `j`. És megpróbálod elosztani `j`-vel `i`-t, ha sikerül legalább egyszer, akkor `i` nem prím, mivel nála kisebb számmal osztható, ha nem sikerül, akkor `i` prím.
1
Még nem érkezett komment!
Nayem{ Informatikus }
válasza
Végre sikerült!
0
Még nem érkezett komment!
zsombi0806{ Matematikus }
válasza
Ehhez még annyi, hogy felesleges végignézni a számokat addig, ahol éppen jársz. Alapból elég csak a prímlistán végigmenni, ha már fenntartod. Ha meg nem csinálnál külön prímlistát, akkor relatív egyszerűen belátható, hogy elég elmenned a szám négyzetgyökéig, hogy találj osztót, ha van. Nagy számok esetében ezzel sok időt megtakarítasz.
0
Még nem érkezett komment!
bongolo{ }
megoldása
Nem pont a feladatot oldom meg annyiban, hogy megváltozik az eredeti lista is.
A prímkeresést a leggyorsabb Eratoszthenész szitájával csinálni. Az a bevett módszer arra, hogy prímszámokat keressen az ember, muszáj megismerni.
A listát elméletileg nem 1-gyel érdemes indítani, hanem 2-vel (az 1 tuti nem prím).
Veszed az első számot (2), az az első prím, és áthúzod a listában (vagyis mondjuk átírod 0-ra) minden másodikat, mert azok mind oszthatóak 2-vel, ez lesz a lista: 2,3,0,5,0,7,0,9,0,11,0,13,0,15,0,17 stb.
Aztán veszed a következő számot, ami nem nulla (az a 3). Az lesz a következő prím, onnantól minden harmadikat áthúzod (lenullázod): 2,3,0,5,0,7,0,0,0,11,0,13,0,0,0,17 stb.
Aztán a következő nem nulla az 5, az a harmadik prím. Minden ötödiket is áthúzod, stb.
Miután végigértél a listán, csak a prímek maradtak meg.
Nem 2-től indítottam a listát, hanem 0-tól. Ennek csak az az oka, hogy így a tömb indexe pont ugyanaz, mint maga a szám, ami abban a tömb-elemben van. Ettől egyszerűbb a program, logikusabbnak tűnnek az utasítások. A 0-as meg 1-es tömb-elem (listaelem) nincs felhasználva semmire.