我怎样才能加速这个python代码?

时间:2017-06-11 10:57:26

标签: python primes

我已经制作了一些计算素数的代码(我知道没什么特别的),正如预期的那样,数字越大越慢,我知道无论数字是多少都不可能让它变速,但我相信我能做到提高它的速度,我只是不知道如何...

<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
    <DefaultCounters/>
    <Counters>
        <Add PerformanceCounter="YOUR COUNTER"/>
    </Counters>
</Add>

1 个答案:

答案 0 :(得分:4)

有几件事:

  • 您无需查看135以及所有奇数号码;
  • 您不必检查 n / 2 ,但您可以在 sqrt(n)停留;
  • 不使用除法,因为那时你使用浮点数,但使用%检查模数;
  • 你只需要检查奇数(或两个);和
  • 你可以省略大于检查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而设计的。如果你真的想编写一个超优化算法,你将不得不选择一种更快(更不方便)的编程语言。