Keresés

Keresendő kifejezés:

Toplista

Toplista
  • betöltés...

Segítség!

Ahhoz, hogy mások kérdéseit és válaszait megtekinthesd, nem kell beregisztrálnod, azonban saját kérdés kiírásához ez szükséges!

PyCharm-ban prímszámok kiírása másik listába

110
Ü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]

VAGY

N = int(input("Meddig: "))
lista = list(range(1, N+1))
print(lista) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., N]

Ebből a listából, hogy tudom kiszedni a prímszámokat egy másik listába?
Az eredmény így nézzen ki kb.:

Eredeti lista: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., N]
Prím számok: [2, 3, 5, 7, 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
Í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

Végre sikerült!
0

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

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.

Itt egy megvalósítás:
https://tio.run/##RZAxbsJAEEVr@xQ/oTHCRCbpkFCUOlIuEFGs48EM612s9SAF34IjUFKkiCJRpVtxLrK2hVLtaHbmz/u/3st6a5@u1zcsMMuyuGlZVKgrbiRxypaUvE1m4zFGKNiRFmRT8T8VNLXF5VCwTrHelnsoiD@bHGwL@oRRpQqtpvVHg4rKPVkk4WlacpfvPL/1DJX@5IQsj@PasZXk/jUIk@Ths9tXZqvn9yl6rn7GBLr3ZbzaOnC4hgHyMUXHOQ@cLALjjw4fjdJ4nMrlMOD6X6vv4ohXSHq5d17iboGs36qd/zI975SgWvBzHEXduQdV12SLJBBG0Qj@1ECz3VWVP7btTsN0ji14SiEMkjR4cjLEkedB8Oz8uSEN2QnDkhkukZ4Huc7E5t8ET7i3kYJ7pkaoXnCYiwbezTJ4z25BvaDDoz6erhpfr38

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.
Módosítva: 5 hónapja
0