数値「n」が素数かどうかを確認するには、n の平方根より小さい因数があるかどうかを確認するだけでよいことが知られています。
私の質問は、n の平方根より小さいすべての素数をチェックするだけで十分ではないということです。
数値「n」が素数かどうかを確認するには、n の平方根より小さい因数があるかどうかを確認するだけでよいことが知られています。
私の質問は、n の平方根より小さいすべての素数をチェックするだけで十分ではないということです。
次のように主張できます。
チェックする数を とするn
。k <= sqrt(n)
を割る数があるとするn
。さて、k
次のように書くことができます。
k = (p_1^a_1)(p_2^a_2)...(p_x^a_x)
ここで、はおよびp_1, p_2, ..., p_x
より小さいか等しい素数です。ここで、が を割っており、 が を割っていることがわかっているので、推移性によって、 が を割っていると推測できます。したがって、 が非素数であることを証明するには、素数のいずれかが割り切れるかどうかを確認するだけで十分です。k
a_1, a_2, ..., a_x >= 1
k
n
p_1, p_2, ..., p_x
k
p_1, p_2, ..., p_x
n
n
<= sqrt(n)
n
はい、係数未満のsqrt(n)を確認するだけで済みます。しかし、このアルゴリズムは少し遅いです。Miller_Rabin_primality という別のより優れたアルゴリズムがあります以前のプロジェクト コード ソース コード
ウィキはこちら