【发布时间】:2017-10-20 03:24:17
【问题描述】:
我正在尝试使用 Python 快速确定数字是否为素数。
我有两个功能可以做到这一点。两者都返回 True 或 False。
函数 isPrime1 很快返回 False 是一个数字不是一个素数。例如有一个大数字。但是对于大素数测试 True 很慢。
函数 isPrime2 对素数返回 True 更快。但是如果一个数字很大并且不是素数,那么返回一个值需要很长时间。第一个函数可以更好地使用它。
我怎样才能想出一个解决方案,它可以快速为非素数的大数返回 False,并且可以快速处理素数的大数?
def isPrime1(number): #Works well with big numbers that are not prime
state = True
if number <= 0:
state = False
return state
else:
for i in range(2,number):
if number % i == 0:
state = False
break
return state
def isPrime2(number): #Works well with big numbers that are prime
d = 2
while d*d <= number:
while (number % d) == 0:
number //= d
d += 1
if number > 1:
return True
else:
return False`
【问题讨论】:
-
使用预先初始化的 Bloom 过滤器,其中包含您需要考虑的最大素数列表。
-
多大?请非常具体,因为答案将直接取决于此。
-
@RoryDaulton:不确定这是一个很好的副本。素性测试是一个比全面分解更容易的问题。
-
仍然是错误的副本。素数分解和素数检验不是一回事。检查一个 1000 位数字是否(可能)是素数非常快;对这样的数字进行确定性素数检查会更慢,但仍然可行。但这超出了有效分解的范围。