isProbablePrime 返回 true 表示极大概率是素数,false 则确定不是素数;certainty 参数控制误判率上限,如 certainty=20 时误判率 ≤ 1/1048576。

isProbablePrime 不是确定性判断,而是基于 Miller-Rabin 概率性素性测试(对小数还辅以试除法),返回 true 表示“极大概率是素数”,false 则**确定不是素数**。
参数 certainty 的含义
该参数代表错误概率的上限:算法保证合数被误判为“可能素数”的概率 ≤ 1 / 2certainty。
- certainty = 0:仅做基本检查(如偶数、小质因数),不运行 Miller-Rabin,可靠性低
- certainty = 10:误判率 ≤ 1/1024(约 0.1%),适合一般用途
- certainty = 20:误判率 ≤ 1/1048576(约 0.0001%),常用推荐值
- certainty = 100:误判率极低(
它不保证 100% 正确,但足够实用
Miller-Rabin 是单向可靠的:若返回 false,该数一定是合数;若返回 true,只是未发现其合性证据。对 ≤ 2⁶⁴ 的整数,使用 certainty ≥ 10 时,已知无反例——即此时等价于确定性判断。对更大整数,提高 certainty 即可指数级降低风险。
典型用法与注意事项
不要用它替代确定性算法(如 AKS)来证明数学结论;但在密码学密钥生成、随机素数采样等工程场景中,certainty 设为 20~100 完全可靠。
立即学习“Java免费学习笔记(深入)”;
- 负数或 0、1 调用时直接返回
false(它们不是素数) - 2 是唯一返回
true的偶数 - 内部对小数值(如
- 性能随数值位数和 certainty 增加而下降,但对千位以内大数仍很快
简单示例
// 判断一个 200 位随机数是否极可能是素数
BigInteger n = new BigInteger(200, new Random());<br> boolean likelyPrime = n.isProbablePrime(20); // 误判率低于百万分之一


















