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
 
     
    