【发布时间】:2019-09-16 13:35:37
【问题描述】:
我已经编写了程序来查找素数,使用尽可能多的技术来查找素数。然而,当我在互联网上搜索时(在 GeekforGeek 上),我发现了一个与我的有点相似(算法思想相同),但产生相同结果的速度要快得多。我想知道这两者有什么区别
我们都将测试减少 1) 只检查奇数。 2)只有奇数的除数 3)只允许除数达到该数的平方根
#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)
显示的结果:
我的:有 78498 个素数 在 17.29092025756836 秒内找到
GeekforGeek 的:范围内的素数总数:78498 所需时间:3.9572863578796387
【问题讨论】:
-
一个明显的区别:第一个版本在内循环的每次迭代中计算一个平方根,第二个版本对每个被测试的数字只计算一次。
-
如果这有帮助,请检查一下。这可能适合您的速度需求。这可能是最好的。 stackoverflow.com/a/71438297/3204942
标签: python performance primes