Wpis z mikrobloga

def isprime(x):
..if x < 2:
....return False
..else:
....for n in range(2, x-1):
......if x % n == 0:
........return False
......else:
........return True

print is
prime(0)
print isprime(2)
print is
prime(3)
print isprime(4)
print is
prime(5)
print isprime(8)

Czemu ten kod nie działa? Może ktoś wyjaśnić jak debilowi czym się różni od:

def is
prime(x):
..if x < 2:
....return False
..else:
....for n in range(2, x-1):
......if x % n == 0:
........return False
......return True
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@programista_1k:
....for n in range(2, x-1):
......if x % n == 0:
........return False
....return True
To return True powinno być poza pętlą for, a przypadek dla liczby 2, powinieneś uwzględnić gdzieś wyżej, bo dla 2 oba kody będą zwracać False
  • Odpowiedz
@programista_1k: No I trzeci protip. Aby sprawdzić czy liczba jest liczbą pierwszą, wystarczy dzielić ją przez liczby od 2 do sqrt(liczba), zmniejszasz wtedy drastycznie ilość wykonywanych operacji.
więc powinno być mniej więcej tak
for n in range(2, int(math.sqrt(x))+2):
  • Odpowiedz
@programista_1k: Nie działa, dla liczb nieparzystych funkcja zwraca zawsze True, niezależnie czy liczba jest pierwsza czy nie jest. Funkcja powinna wyglądać tak:
from math import sqrt
def isprime(x):
..if x == 2:
....return True
..if
  • Odpowiedz