I have written program to find prime numbers, use as much technique as I can to find prime numbers. However, when searching the Internet (on GeekforGeek), I found one that kinda similar to mine (same on algorithm ideas), but produce the same result much faster. I wonder what is the difference between the two
We both reduce the test by 1) only check the odd numbers. 2) have the divisor only at odd numbers 3) only allow divisor to reach square root of that number
#my code
import time
import math
start = time.time()
upperlimit = 1000000
counter = 1
number = 3
while number<upperlimit: #loop to check number
shittyvalue = 0
division = 3
while math.sqrt(number) >= division: # conditional loop
if number % division == 0:
shittyvalue = 1 #for giving the annoucement on whether this number is a prime
break
division = division + 2
if shittyvalue == 0:
counter = counter + 1
number = number + 2
print ("There are ",counter, " prime numbers")
end = time.time()
print ("Found in ",end-start, " seconds")
#GeekforGeek code's
# Python Program to find prime numbers in a range
import math
import time
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n > 2 and n % 2 == 0:
return False
max_div = math.floor(math.sqrt(n))
for i in range(3, 1 + max_div, 2):
if n % i == 0:
return False
return True
# Driver function
t0 = time.time()
c = 0 #for counting
for n in range(1,1000000):
x = is_prime(n)
c += x
print("Total prime numbers in range :", c)
t1 = time.time()
print("Time required :", t1 - t0)
The result shown:
Mine: There are 78498 prime numbers Found in 17.29092025756836 seconds
GeekforGeek's: Total prime numbers in range : 78498 Time required : 3.9572863578796387