Python 两个非常相似的代码在n下生成素数,但CPU时间非常不同

Python 两个非常相似的代码在n下生成素数,但CPU时间非常不同,python,time-complexity,primes,Python,Time Complexity,Primes,这两个非常相似的代码具有非常不同的速度。我不明白为什么。第一个比第二个慢得多(2分钟) ================================================================== def isPrime(p, primes): bound = numpy.sqrt(p) i = 0 while(primes[i] <= bound): if p % primes[i] == 0

这两个非常相似的代码具有非常不同的速度。我不明白为什么。第一个比第二个慢得多(2分钟)

==================================================================

def isPrime(p, primes):
        bound = numpy.sqrt(p)
        i = 0
        while(primes[i] <= bound):
            if p % primes[i] == 0:
                return False
            i += 1
        return True

def compute_primes(bound):
    primes = []
    primes.append(2)
    for n in range(3, bound):
        answer = isPrime(n, primes)
        if answer:
            primes.append(n)
    return primes

compute_primes(1000000)
def isPrime(p,primes):
绑定=numpy.sqrt(p)
i=0

while(primes[i]性能差异的原因是第一个版本在达到上限时不会像第二个版本那样破坏内部循环。假设两个版本都在检查
11
是否为prime。第一个版本将为所有较小的primes
运行内部循环(2,3,5,7)
其中作为第二个选项,只检查小于或等于
sqrt(11)
(2,3)

如果将第一个版本更改为在达到上限时中断,则它们的运行时间大致相同:

if j > sq:
    aux = True
    break

性能差异的原因是,当达到上限时,第一个版本不会像第二个版本那样中断内环。假设两个版本都在检查
11
是否为素数。第一个版本将为所有较小的素数
(2、3、5、7)运行内环
其中作为第二个选项,只检查小于或等于
sqrt(11)
(2,3)

如果将第一个版本更改为在达到上限时中断,则它们的运行时间大致相同:

if j > sq:
    aux = True
    break

第一个缩进无效。Python不会运行它。第一个缩进无效。Python不会运行它。。