私は、与えられた自然数のすべての除数を見つけてそれらをリストとして返す次の関数を書きました。
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
この方法は、単一の数値をチェックするときに非常に効率的ですが、特定の境界まですべての素数をコンパイルするためにこの方法を使用する必要があるかどうかはわかりません。