# # # # # # # # # # # # # # # # # # #
# I.535.                            #
# Nagy 292 Korina, 8.osztály        #
# Kecskeméti Bányai Júlia Gimnázium #
# Python 3.8                        #
# # # # # # # # # # # # # # # # # # #

def ujPrimkereso():
    # ez a függvény minden meghívásakor a 'primek' listához ad egy elemet, a növekvõben következõ prímszámot
    db = len(primek)
    if (db == 0):   # ha eddig 0 elemû a lista, akkor a programnak egészen 1-tõl kezdve kell megvizsgálnia a számokat, hogy prímek-e
        szam = 0        # a változó értéke ekkor azért 0 és nem 1, mert amikor használom egy ciklusban, megnövelem 1-gyel (*)
    else:           # ha nem 0 elemû, akkor a programnak az elõzõ elem+1-tõl (*) kezdve kell prímet keresnie
        szam = primek[db-1]     # így a legutólsó listaelem (az eddigi legnagyobb prímszám) lesz a változó értéke
    while(len(primek) == db):       # a ciklus addig fut, amég a 'primek' elemeinek száma nem változik (amég nem nõ)
        szam = szam+1       # *itt növelem meg 1-gyel a változó értékét
        osztok_szama = 0        # a program a szám osztóinak száma segítségével dönti el, hogy a szám prím-e, az osztók száma lesz ebben a változóban tárolva
        for ii in range (1, szam+1):
            if (szam % ii == 0):
                osztok_szama = osztok_szama + 1
        if (osztok_szama == 2):     # ha az osztók száma pontosan 2, a számot hozzáfûzi a 'primek' listához,
            primek.append(szam)     # így a lista elemszáma megváltozik, a program kilép a ciklusnól

# ---------------------------------------- fõprogram ----------------------------------------

primek = []       # lista definiálása, ebben lesznek a feladathoz szükséges prímszámok
lancok_min5 = []        # lista definiálása, ebbe kerülnek a legalább 5 elemû láncok
for i in range (1, 1000):
    #a ciklus minden lefutásakor egy láncot képez a ciklusváltozóval megegyezõ kezdõértékkel
    uj_elem = True
    lanc = []
    lanc.append (i)
    while (uj_elem == True):    # a ciklus addig fut, amég a program talál a láncnak új elemét
        if (len(primek)>=len(lanc)):    # a feltétel megvizsgálja, hogy a 'primek' lista tartalmaz-e elég prímet az oszthatósági vizsgálat elvégzéséhez
            if (lanc[len(lanc)-1] % primek[len(lanc)-1] == 0):  # feltétel: az x.elem osztható az x.prímmel?
                lanc.append(lanc[len(lanc)-1]+primek[len(lanc)-1])      #ha igen, a következõ elem az x.elem+x.prím
            else:                                                       #ha nem, akkor nincs több eleme a láncnak,
                uj_elem = False             # a program hamisra változtatja  az 'uj_elem' változó értékét, és így kilép a ciklusból
        else:       # ha a feltétel nem teljesült, a program meghívja az 
            ujPrimkereso()  # 'ujPrimkereso' függvényt, így elérheti, hogy a feltétel teljesüljön
    if (len(lanc) >= 5):        # ha a lánc legalább 5 elemû, a program
        lancok_min5.append(lanc)    # egy másik listában eltárolja, ha nem, akkor nem

#kimenet: soronként egy legalább ötelemû lánc kiírása(az elemek ','-vel elválasztva), ahol a kezdõérték maximum 999
for i in range (0, len(lancok_min5)):
    for j in range (0, len(lancok_min5[i])-1):
        print(lancok_min5[i][j], end=", ")
    print (lancok_min5[i][len(lancok_min5[i])-1])
