【发布时间】:2021-01-28 23:51:21
【问题描述】:
我一直在使用这个代码来检查一个数字是否是素数:
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 测试,但从未能够在我的代码中实现它。有没有更有效的方法来检查大数的素数但仍然尽可能快?
【问题讨论】:
-
我确信在这个网站上已经有关于计算一个数是否是素数的话题了。 stackoverflow.com/questions/4114167/…
-
在非素数的情况下,您不需要找到所有因素 - 只需在找到的第一个因素处打破循环。
-
“在 python 中”——没有。
-
另外,您可以通过立即消除所有偶数来加快循环 50%,然后以 i = 3 开始循环,然后以两个 (i += 2) 的形式向上。
-
没有必要附加每个因素。它将极大地增加程序消耗的时间和空间。只需循环直到
i²<=n。如果在 i² 接近 n 之前找到任何因子,则中断循环并打印NO
标签: python python-3.x primes