如何提高python代码的速度?
我已经做了一些计算素数的代码,没有什么特别的我知道,正如预期的那样,它减慢了较大的数字,我知道这是不可能使它的速度相同,无论是数字,但我相信我可以提高它的速度,我只是不知道如何如何提高python代码的速度?,python,primes,Python,Primes,我已经做了一些计算素数的代码,没有什么特别的我知道,正如预期的那样,它减慢了较大的数字,我知道这是不可能使它的速度相同,无论是数字,但我相信我可以提高它的速度,我只是不知道如何 import time number = 1000000001 count = 0 start = time.time() while number > 1000000000 and number < 10000000000000: for i in range(1, round(number/2 +
import time
number = 1000000001
count = 0
start = time.time()
while number > 1000000000 and number < 10000000000000:
for i in range(1, round(number/2 + 1)):
if (number / i).is_integer():
count += 1
if count > 1:
break
if count < 2:
print(str(number) + ' prime')
number = number + 1
count = 0
end = time.time()
print(end - start)
有几件事:
您不必检查1,而是检查3、5和所有奇数;
在n/2之前您不必检查,但您可以在sqrtn停止;
不要使用除法,因为这样您就可以使用浮点,但要使用%来检查模;
你只需要检查一两个奇数;和
您可以忽略while循环中的大于检查,因为该数字仅递增。
因此,改进的版本将是:
import time
from math import sqrt # import square root
start = time.time()
for number in range(1000000001,10000000000000,2): # use for, hops of 2
for i in range(3, int(sqrt(number))+1,2): # check 3, 5,... up to sqrt(n)
if number % i == 0: # use modulo checks instead of floating point
break
else: # use a for-else structure for faster ending
print(str(number) + ' prime')
count = 0
end = time.time()
print(end - start)
尽管如此,Python并不是为了充分利用CPU而设计的。如果你真的想编写一个超级优化算法,你必须选择一种更快、更不方便的编程语言。有几件事:
您不必检查1,而是检查3、5和所有奇数;
在n/2之前您不必检查,但您可以在sqrtn停止;
不要使用除法,因为这样您就可以使用浮点,但要使用%来检查模;
你只需要检查一两个奇数;和
您可以忽略while循环中的大于检查,因为该数字仅递增。
因此,改进的版本将是:
import time
from math import sqrt # import square root
start = time.time()
for number in range(1000000001,10000000000000,2): # use for, hops of 2
for i in range(3, int(sqrt(number))+1,2): # check 3, 5,... up to sqrt(n)
if number % i == 0: # use modulo checks instead of floating point
break
else: # use a for-else structure for faster ending
print(str(number) + ' prime')
count = 0
end = time.time()
print(end - start)
尽管如此,Python并不是为了充分利用CPU而设计的。如果您真的想编写一个超级优化算法,您必须选择一种更快、更不方便的编程语言。首先,Python的复制速度很慢。其次,有很多非常先进和难以理解的算法来寻找素数。这不是5分钟谈话的主题。根据,使用@khelwood,即使对于10吨的限制,这也需要大约一天的时间——25小时。试用版将运行数年,也许几个世纪,谁知道呢。第一个Python的可能复制速度很慢。其次,有很多非常先进和难以理解的算法来寻找素数。这不是5分钟谈话的主题。根据,使用@khelwood,即使对于10吨的限制,这也需要大约一天的时间——25小时。试飞师将运行数年,也许几个世纪,谁知道呢。你可以使用n的范围,100000000000,2。for循环比while循环快。这非常有用,我还注意到,如果我不打印素数,而是将它们附加到列表中,完成后打印列表会快得多。你可以使用rangenumber中的n,100000000000,2。for循环比while循环快。这非常有用,我还注意到,如果我不打印素数,而是将它们附加到列表中,完成后打印列表会快得多。