python - Why does this prime test work? -


i have found python function testing whether or not number prime; however, cannot figure out how algorithm works.

def isprime(n):    """returns true if n prime"""    if n == 2: return true    if n == 3: return true    if n % 2 == 0: return false    if n % 3 == 0: return false     = 5    w = 2    while * <= n:       if n % == 0:          return false        += w       w = 6 - w     return true 

let's start first 4 lines of function's code:

def isprime(n):     if n == 2: return true     if n == 3: return true     if n % 2 == 0: return false     if n % 3 == 0: return false 

the function tests see if n equal 2 or 3 first. since both prime numbers, function return true if n equal either.

next, function tests see if n divisible 2 or 3 , returning false if either true. eliminates extremely large amount of cases because half of numbers above 2 not primes - divisible 2. same reason applies testing divisibility 3 - eliminates large number of cases.

the trickier part of function in next few lines:

i = 5 w = 2 while * <= n:     if n % == 0:         return false      += w     w = 6 - w  return true 

first, i (or index) set 5. 2 , 3 have been tested, , 4 tested n % 2. so, makes sense start @ 5.

next, w set 2. w seems "incrementer". now, function has tested numbers (n % 2), faster increment 2.

the function enters while loop condition i * <= n. test used because every composite number has proper factor less or equal square root. wouldn't make sense test numbers after square root because redundant.

in while loop, if n divisible i, not prime , function returns false. if not, i incremented "incrementer" w, which, again, faster.

perhaps trickiest part of function lies in second-to-last line: w = 6 - w. causes "incrementer" w toggle between values 2 , 4 each pass through loop. in cases w 4, bypassing number divisible 3. faster remaining @ 2 because function tested divisibility both 2 , 3.

finally, function returns true. if function hasn't detected cases n divisible something, must prime number.


Comments

Popular posts from this blog

image - ClassNotFoundException when add a prebuilt apk into system.img in android -

I need to import mysql 5.1 to 5.5? -

Java, Hibernate, MySQL - store UTC date-time -