素数判定が NP というはなし
参考資料 : https://www.cmi.ac.in/~ramprasad/lecturenotes/comp_numb_theory/lecture17.pdf
素数判定問題
bit の整数 が与えられる。 が素数であるか判定せよ。
素数判定問題は co-NP
が素数でない証拠が与えられたとき、 の多項式時間で が素数でないことを検証することができるならば、素数判定問題は co-NP に属すると言います。
例えば、以下のようにすれば、多項式時間で が素数でないことを検証することができます。
証拠 : 以上の整数 であって、 を満たすもの
検証アルゴリズム : が 以上であること、 であることを確認する。
bit の掛け算は 時間とかでできるので、多項式時間です。
素数判定問題は NP
が素数である証拠が与えられたとき、 の多項式時間で が素数であることを検証することができるならば、素数判定問題は NP に属すると言います。
多項式時間で が素数であることを検証するため、原始根 を用います。
整数 に対し、 は周期的である。(オイラーの定理)
が素数であるとき、ある整数 (原始根) が存在して、 の周期は である。
が合成数であるとき、どんな整数 に対しても、 の周期は より小さい。
から始まって に帰ってくるまでが 周期となるので、原始根 を証拠として、以下を検証すれば良いです。
-
- の素因数分解を としたとき、各 について、 である。
ここで、 の素因数分解は簡単に行えるものではないので、証拠に追加してこれを検証することにします。つまり、再帰的に素数であることの検証を行います。
まとめると、以下のようになります。
が素数であることの証拠
検証アルゴリズム
- 各 が素数であることを再帰的に検証
- であることを確認
- であることを確認
- 各 に対し、 であることを確認
これが多項式時間であることを確認します。
まず、再帰部分以外が多項式時間であることを確認します。
bit の掛け算が 時間であり、 であることから、再帰部分以外は 時間で抑えられます。
のとき、 は で割れるので、再帰の深さは 以下です。また、ある深さにおける の合計が元々の の定数倍で抑えられることから、再帰部分を含めても、全体で 時間となります。
素数判定問題は P
証拠が与えられなくても、 の多項式時間で が素数であるかどうかを判定することができるならば、素数判定問題は P に属すると言います。
実は、素数判定問題は P に属することが知られています。
https://ja.wikipedia.org/wiki/AKS素数判定法