1. 问题定义
输入:一个正整数N;
输出:N是否为素数。
2. 随机算法设计
基本思想:对N进行m次测试,如果有一次测试成功,则回答N是合数;如果m次测试均失败,则回答N是素数。回答N是合数时,答案100%正确;回答N是素数时,答案正确的概率是1 - 2^(-m)。算法基本步骤如下:
1. 随机选择m个数{b1,b2,...,bm}满足 1≤ b1,b2,...,bm≤N;
2. For i=1 To m Do
3. if W(bi)成立 Then Return (N是合数)
4. Return (N是素数)
其中W(bi)的定义为:bi^(N-1) mod N ≠ 1 或者 存在j使得(N - 1)/ 2^j = k 是整数并且bi^k - 1与N的最大公因数不同于1和N。
3. 算法的性能分析
为判定正整数N是否为素数,可利用费尔马小定理对N进行m次随机测试。如果其中一次测试成功,则断言N是合数,如果m次测试失败,则断言N是素数,但此时结论不一定正确,结论正确的概率大于 1 - 2^-m。