Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提高python代码的速度?_Python_Primes - Fatal编程技术网

如何提高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循环快。这非常有用,我还注意到,如果我不打印素数,而是将它们附加到列表中,完成后打印列表会快得多。