Problem z zadaniem

0

Mam napisać program, który wpisze wszystkie podane przez użytkownika liczby oprócz liczb pierwszych występujących nieparzystą ilość razy. Problem w tym, nie wypisuje '1' . Co robię nie tak?

n = int(input("Wprowadz ilosc liczb: "))
liczby=[]
liczbyKoncowe=[]
liczby_pierwsze=[2]
for i in range (0, n):
    x = int(input("Wprowadz liczbe: "))
    liczby.append(x)
print(liczby)

def czy_pierwsza(liczba):
    for dzielnik in liczby_pierwsze:
        if liczba % dzielnik == 0:
            return False
        if dzielnik * dzielnik > liczba:
            return True
    return True 
for i in range(0, n):
    wystepowanie=liczby.count(liczby[i])
    if ((czy_pierwsza(liczby[i]) is True and wystepowanie%2 == 0) or (czy_pierwsza(liczby[i]) is False)):
        liczbyKoncowe.append(liczby[i])
liczbyKoncowe.remove(2)
print (liczbyKoncowe)

        
0

czy_pierwsza(1) zwraca Ci True.

1
def main():
    [twoj input]
    pierwsze = set(primes_guaz(max(liczby)+1))
    wynik = [i for i in set(liczby) if (liczba in pierwsze and not liczby.count(liczba%2)) or liczba not in pierwsze)
    for liczba in wynik:
        print(liczba, end=", ")
    else: print();

def primes_guaz(n=10**6):
    from itertools import compress
    s = bytearray([1])*(n//2); sqrt_n = int(n**0.5)+1;
    i = 3;
    def mo():
        s[i*i//2::i] = bytearray((n-i*i-1)//(i+i)+1)
    while i<sqrt_n:
        mo() if s[i//2] else 0
        i += 2
    return [2, *compress(range(3,n,2), s[1:])]

if __name__ == "__main__":
    main()```
Możesz od razu wygenerować siatkę pierwszych dla tego co będziesz sprawdzał w programie, ograniczy to setki dzieleń modulo które wykonujesz :)
0

W zasadzie to zrobiłem coś takiego: Wiem, że to trochę "naciągany" program, ale działa ;) Pewnie trzeba go jakoś zoptymalizować

n = int(input("Wprowadz ilosc liczb: "))
liczby=[]
liczbyKoncowe=[]
liczby_pierwsze=[2]
for i in range (0, n):
    x = int(input("Wprowadz liczbe: "))
    liczby.append(x)
print(liczby)

def czy_pierwsza(liczba):
    for dzielnik in liczby_pierwsze:
        if liczba % dzielnik == 0:
            return False
        if dzielnik * dzielnik > liczba:
            return True
    return True 
for i in range(0, n):
    wystepowanie=liczby.count(liczby[i])
    if ((czy_pierwsza(liczby[i]) is True and wystepowanie%2 == 0) or (czy_pierwsza(liczby[i]) is False)):
        liczbyKoncowe.append(liczby[i])
for i in range (0, n):
    wystepowanie=liczby.count(liczby[i])
    if (liczby[i]==2 and wystepowanie%2 != 0):
        liczbyKoncowe.remove(liczby[i])
    elif liczby[i]==1:
        liczbyKoncowe.append(liczby[i])
print (liczbyKoncowe)

        

1 użytkowników online, w tym zalogowanych: 0, gości: 1