改进代码以查找素数

时间:2018-06-08 02:16:01

标签: python performance primes

我在3天前编写了这个python代码,我被困在这里,我觉得它可能会更好,但我不知道如何改进它。你能帮帮我吗?

# Function
def is_prime(n):
    if n == 2 or n == 3:
        return True

    for d in range(3, int(n**0.5), 2):
        if n % d == 0:
            return False

    return True

2 个答案:

答案 0 :(得分:2)

找到相对较小的素数的一种很好的确定性方法是使用sieve

这种技术背后的数学原理如下:检查数字是否为素数,只需检查它是否可被其他素数整除。

import math

def is_prime(n):
    # Prepare our Sieve, for readability we make index match the number by adding 0 and 1
    primes = [False] * 2 + [True] * (n - 1)

    # Remove non-primes
    for x in range(2, int(math.sqrt(n) + 1)):
        if primes[x]:
            primes[2*x::x] = [False] * (n // x - 1)

    return primes[n]

    # Or use the following to return all primes:
    # return {x for x, is_prime in enumerate(primes) if is_prime}

print(is_prime(13)) # True

为了重复使用,您可以调整上述代码,将所有素数的set返回到n

答案 1 :(得分:0)

尝试以下代码,速度与OlivierMelançon的解决方案相同:

from math import sqrt; from itertools import count, islice

def is_prime(n):
    return n > 1 and all(n%i for i in islice(count(2), int(sqrt(n)-1)))

print(is_prime(5))

输出:

True