フェルマーの小定理によると、
素数
が成り立ちます。
しかしこれだけだと「フェルマー擬似素数」という例外もあり、完全判定できません。
ミラー・ラビン法は、次のように
以下の図で判定の流れを説明します。
N - 1 = 2^r * d (dは奇数)
Choose a base 'a' (2 ≤ a ≤ N-2)
Compute x = a^d mod N
+-------------------------+
| |
| x == 1 or x == N-1? <-- Yes --> "Probably prime" for this base
| |
+-----------+-------------+
|
No
|
v
Repeat r-1 times:
x = x^2 mod N
If x == N-1 --> "Probably prime"
Else continue
If none is N-1 --> "Composite"
Start:
Compute x = a^d mod N
+------------------+
| x == 1 or N-1 ? |-- Yes --> probably prime (test next base or finish)
+------------------+
|
No
|
v
Loop (r-1) times:
x = x^2 mod N
+------------------+
| x == N-1 ? |-- Yes --> probably prime (break loop)
+------------------+
|
No
|
Loop continues
If loop ends without x == N-1:
return Composite
- 素数ならば、上の条件を必ず満たします。
- 合成数は「強擬似素数」と呼ばれるもの以外は、このテストで検出されます。
- 複数の異なる基数
$a$ を試すことで誤判定の確率を限りなく下げられます。
| ステップ | 内容 |
|---|---|
| 1 |
|
| 2 | 基数 |
| 3 |
|
| 4 | そうでなければ、$r-1$ 回繰り返し |
| 5 | それ以外は合成数と判定 |