我编写了以下函数,它查找给定自然数的所有除数并将它们作为列表返回:
def FindAllDivisors(x):
divList = []
y = 1
while y <= math.sqrt(x):
if x % y == 0:
divList.append(y)
divList.append(int(x / y))
y += 1
return divList
它工作得非常好,只是当输入是一个 18 位数字时它真的很慢。您对我如何加快速度有什么建议吗?
更新:
我有以下方法来检查基于费马小定理的素数:
def CheckIfProbablyPrime(x):
return (2 << x - 2) % x == 1
这种方法在检查单个数字时非常有效,但是我不确定是否应该使用它来编译所有素数到某个边界。