vegaseat

timeit of four isprime functions

Mar 13th, 2015
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.52 KB | None | 0 0
  1. ''' timeit_isprime.py
  2. check the speed of four isprime functions
  3. '''
  4.  
  5. import timeit
  6. import sys
  7.  
  8. print(sys.version)
  9.  
  10. def isprime2(n):
  11.     '''
  12.    check if integer n is a prime, return True or False
  13.    '''
  14.     # 2 is the only even prime
  15.     if n == 2:
  16.         return True
  17.     # integers less than 2 and even numbers other than 2 are not prime
  18.     elif n < 2 or not n & 1:
  19.         return False
  20.     #if n % 3 == 0: return False
  21.     # loop looks at odd numbers 3, 5, 7, ... to sqrt(n)
  22.     for i in range(3, int(n**0.5)+1, 2):
  23.         if n % i == 0:
  24.             return False
  25.     return True
  26.  
  27. def isprime3(n):
  28.     '''
  29.    check if integer n is a prime, return True or False
  30.    '''
  31.     # 2 is the only even prime
  32.     if n == 2:
  33.         return True
  34.     # integers less than 2 and even numbers other than 2 are not prime
  35.     if n < 2:
  36.         return False
  37.     if not n & 1:  # even numbers
  38.         return False
  39.     # loop looks at odd numbers 3, 5, 7, ... to sqrt(n)
  40.     for i in range(3, int(n**0.5)+1, 2):
  41.         if n % i == 0:
  42.             return False
  43.     return True
  44.  
  45. def isprime4(n):
  46.     '''
  47.    check if integer n is a prime, return True or False
  48.    uses a while loop, another way to write it, but is slower
  49.    '''
  50.     # 2 is the only even prime
  51.     if n == 2:
  52.         return True
  53.     # integers less than 2 and even numbers other than 2 are not prime
  54.     if n < 2:
  55.         return False
  56.     if n % 2 == 0:  # even numbers
  57.         return False
  58.     k = 3
  59.     while k * k <= n:
  60.          if n % k == 0:
  61.              return False
  62.          k += 2
  63.     return True
  64.  
  65. def isprime5(n):
  66.     if n == 2 or n == 3: return True
  67.     if n < 2 or n%2 == 0: return False
  68.     if n < 9: return True
  69.     if n%3 == 0: return False
  70.     sqr = int(n**0.5)
  71.     f = 5
  72.     while f <= sqr:
  73.         if n%f == 0: return False
  74.         if n%(f+2) == 0: return False
  75.         # loop every 6th integer
  76.         f += 6
  77.     return True
  78.  
  79. # note 9999991 is a prime number
  80. print(isprime2(9999991))
  81. print(isprime3(9999991))
  82. print(isprime4(9999991))
  83. print(isprime5(9999991))
  84.  
  85. stmt = 'isprime2(9999991)'
  86. find_function = 'from __main__ import isprime2'
  87. t = timeit.Timer(stmt, setup=find_function)
  88. # doing 1000 passes * 1000 gives the time in microseconds/pass
  89. elapsed = (1000 * t.timeit(number=1000))
  90. print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
  91.  
  92. stmt = 'isprime3(9999991)'
  93. find_function = 'from __main__ import isprime3'
  94. t = timeit.Timer(stmt, setup=find_function)
  95. # doing 1000 passes * 1000 gives the time in microseconds/pass
  96. elapsed = (1000 * t.timeit(number=1000))
  97. print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
  98.  
  99. stmt = 'isprime4(9999991)'
  100. find_function = 'from __main__ import isprime4'
  101. t = timeit.Timer(stmt, setup=find_function)
  102. # doing 1000 passes * 1000 gives the time in microseconds/pass
  103. elapsed = (1000 * t.timeit(number=1000))
  104. print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
  105.  
  106. stmt = 'isprime5(9999991)'
  107. find_function = 'from __main__ import isprime5'
  108. t = timeit.Timer(stmt, setup=find_function)
  109. # doing 1000 passes * 1000 gives the time in microseconds/pass
  110. elapsed = (1000 * t.timeit(number=1000))
  111. print("%s takes %0.3f micro-seconds/pass" % (stmt, elapsed))
  112.  
  113.  
  114. ''' result ...
  115. 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)]
  116. True
  117. True
  118. True
  119. True
  120. isprime2(9999991) takes 197.503 micro-seconds/pass
  121. isprime3(9999991) takes 196.715 micro-seconds/pass
  122. isprime4(9999991) takes 361.188 micro-seconds/pass
  123. isprime5(9999991) takes 168.592 micro-seconds/pass
  124. '''
Advertisement
Add Comment
Please, Sign In to add comment