Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ''' timeit_isprime.py
- check the speed of four isprime functions
- '''
- import timeit
- import sys
- print(sys.version)
- def isprime2(n):
- '''
- check if integer n is a prime, return True or False
- '''
- # 2 is the only even prime
- if n == 2:
- return True
- # integers less than 2 and even numbers other than 2 are not prime
- elif n < 2 or not n & 1:
- return False
- #if n % 3 == 0: return False
- # loop looks at odd numbers 3, 5, 7, ... to sqrt(n)
- for i in range(3, int(n**0.5)+1, 2):
- if n % i == 0:
- return False
- return True
- def isprime3(n):
- '''
- check if integer n is a prime, return True or False
- '''
- # 2 is the only even prime
- if n == 2:
- return True
- # integers less than 2 and even numbers other than 2 are not prime
- if n < 2:
- return False
- if not n & 1: # even numbers
- return False
- # loop looks at odd numbers 3, 5, 7, ... to sqrt(n)
- for i in range(3, int(n**0.5)+1, 2):
- if n % i == 0:
- return False
- return True
- def isprime4(n):
- '''
- check if integer n is a prime, return True or False
- uses a while loop, another way to write it, but is slower
- '''
- # 2 is the only even prime
- if n == 2:
- return True
- # integers less than 2 and even numbers other than 2 are not prime
- if n < 2:
- return False
- if n % 2 == 0: # even numbers
- return False
- k = 3
- while k * k <= n:
- if n % k == 0:
- return False
- k += 2
- return True
- def isprime5(n):
- if n == 2 or n == 3: return True
- if n < 2 or n%2 == 0: return False
- if n < 9: return True
- if n%3 == 0: return False
- sqr = int(n**0.5)
- f = 5
- while f <= sqr:
- if n%f == 0: return False
- if n%(f+2) == 0: return False
- # loop every 6th integer
- f += 6
- return True
- # note 9999991 is a prime number
- print(isprime2(9999991))
- print(isprime3(9999991))
- print(isprime4(9999991))
- print(isprime5(9999991))
- stmt = 'isprime2(9999991)'
- find_function = 'from __main__ import isprime2'
- t = timeit.Timer(stmt, setup=find_function)
- # doing 1000 passes * 1000 gives the time in microseconds/pass
- elapsed = (1000 * t.timeit(number=1000))
- print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
- stmt = 'isprime3(9999991)'
- find_function = 'from __main__ import isprime3'
- t = timeit.Timer(stmt, setup=find_function)
- # doing 1000 passes * 1000 gives the time in microseconds/pass
- elapsed = (1000 * t.timeit(number=1000))
- print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
- stmt = 'isprime4(9999991)'
- find_function = 'from __main__ import isprime4'
- t = timeit.Timer(stmt, setup=find_function)
- # doing 1000 passes * 1000 gives the time in microseconds/pass
- elapsed = (1000 * t.timeit(number=1000))
- print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
- stmt = 'isprime5(9999991)'
- find_function = 'from __main__ import isprime5'
- t = timeit.Timer(stmt, setup=find_function)
- # doing 1000 passes * 1000 gives the time in microseconds/pass
- elapsed = (1000 * t.timeit(number=1000))
- print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
- ''' result ...
- 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)]
- True
- True
- True
- True
- isprime2(9999991) takes 197.503 micro-seconds/pass
- isprime3(9999991) takes 196.715 micro-seconds/pass
- isprime4(9999991) takes 361.188 micro-seconds/pass
- isprime5(9999991) takes 168.592 micro-seconds/pass
- '''
Advertisement
Add Comment
Please, Sign In to add comment