Problem: liczby pierwsze

0

Witam,

Piszę program rozpoznający liczby pierwsze. Oto co mam do tej pory:

# Program "Liczby pierwsze"

def is_prime(x):
    for i in range[2, int(x)]: # zakres liczb od 2 do danej liczby - 1
        if x % i == 0: # jeśli któraś z liczb z tego zakresu dzieli sprawdzaną liczbę bez reszty zwróć NIE
            return "NIE"
    return "TAK"

n = int(input()) # wprowadzanie liczby testów
if n < 100000 and n > 0: # czy liczba testów mieści się w żądanym zakresie
    while n > 0:
        number = int(input()) # wprowadzanie sprawdzanej liczby
        if number >= 1 & number <= 10000: # czy liczba mieści się w żądanym zakresie
            print (is_prime(number)) # wywołanie funkcji sprawdzającej i wyświetlenie
        n -= 1 # dekrementacja pozostałej do końca liczby testów

Błąd jaki otrzymuje to:

Traceback (most recent call last):
  File "C:/Users/Piotr/Desktop/is_prime.py", line 14, in <module>
    print (is_prime(number))
  File "C:/Users/Piotr/Desktop/is_prime.py", line 4, in is_prime
    for i in range[2, int(x)]:
TypeError: 'type' object is not subscriptable 

Co jest z moim kodem nie tak?

Drugie moje pytanie to gdzie powinienem definiować funkcje: przed czy po kodzie programu głównego? Jaki jest ogólnie przyjęta kolejność definiowania (klasy, funkcje, zmienne, reszta programu)?

0

Bardzo nieoptymalnie to sprawdzasz. Da się sporo szybciej bez używania jakiś wykwintnych algorytmów.

1

Jejku jej. range to funkcja a funkcje woła sie przez () a nie []. Poza tym nie rzutuj na inta jak już masz inta, nie ma sensu. No i to sprawdzanie robisz bardzo bardzo bardzo źle. Najgorzej jak sie da. Po co szukasz dzielników większych od pierwiastka z x? Po co dzielisz przez parzyste liczby większe od 2?

0

Już nawet bez używania sita Erastotenesa wystarczy, że poprawisz wywołanie funkcji range oraz zmienisz, że sprawdzasz do zaokrąglonego w górę pierwiastka z x.

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