有没有一种快速有效的方法来检查python中的数字是否为质数10 ^ 18位

问题描述

我一直在使用此代码检查数字是否为质数:

def pcheck(number):
    if number < 2:
        k = "NO"
    # theres no prime number less than 2
    else:
        i = 2
        factors = []
        while i * i <= number:
            if number % i:
                i += 1
            else:
                number //= i
                factors.append(i)
        if number > 1:
            factors.append(n)
        # get the factors of the number,a prime number will only have 1 factor,not including 1
        if len(factors) == 1:
            k = "YES"
        else:
            k = "NO"
    return k


n = int(input())
print(pcheck(n))

但是即使进行了修改,它仍将难以处理具有18位数字的数字,这对我来说很麻烦,因为在这种情况下我无法使用它。我听说过,但是rabin miller测试,但是从未能够在我的代码中实现它。有没有更有效的方法来检查大量的素数,但仍然尽可能快?

解决方法

有很多方法可以改善此功能。首先,您只需要检查直到number的平方根即可确定您是否会发现任何有意义的因素。而且,一旦找到一个因素,就可以立即终止该功能(不必继续搜索)。

但是,一般而言,没有快速的方法可以做到这一点。这是素数的美。要知道大量是否为素数需要花费大量的计算时间。查找大量的素因还需要大量的计算时间。