/ / Python: hlavný test - python

Python: hlavný test - python

Píšem kód, ktorý určuje, či je číslo prime. To je to, čo som doposiaľ zhromaždil:

def isprime(p):
"""check if integer p is a prime"""
# make sure n is a positive integer
p = abs(int(p))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n = 2:
return True
# all other even numbers are not primes
if not p & 1:
return False
# for all odd numbers
for x in range(3, int(n**0.5)+1, 2):
if n % x == 0:
return False
return True

odpovede:

0 pre odpoveď č. 1

Zdá sa, že používate triviálnu (aka pomalú) metódu výpočtu prvočísel: pre hlavného kandidáta p skúste rozdeliť celé celé čísla z 2 na podlahu (sqrt (p)).

eps = 1e-9
def isprime(p):
int_p = int(p)
# only integers are prime, accounting for floating point rounding error
if abs(int_p - p) < eps:
return False
else:
# a number is prime only if it cannot be evenly divided
# by all prime factors lower than the number
return all(p % i != 0 for i in xrange(2, int(p**0.5)+1))

Dôvod, prečo chcete chcieť len kontrolovať nepárnečísla od 3 do sqrt (p) je pravdepodobne preto, že poznáte, že všetky sudé čísla väčšie ako 2 nie sú prime. Môžete robiť lepšie, než vylúčiť len párne čísla z tejto kontroly ... Stačí skontrolovať prvočísla čísla od 2 do sqrt (p). Ak sa stanete, že voláte isprime niekoľkokrát si ich môžete vytvoriťprvočísla. Existujú ešte efektívnejšie primárne algoritmy, v závislosti od problému, ktorý sa pokúšate vyriešiť (Pokúšate sa nájsť všetky prémií z dolnej hranice do hornej hranice? Pokúšate sa nájsť množstvo prvotných? nájsť nejaké prime?)