Problem: liczby pierwsze

Problem: liczby pierwsze
P3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Witam,

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

Kopiuj
# 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:

Kopiuj
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)?

pingwindyktator
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1055
0

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6965
Pipes
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 459
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.