Java 素数判断的 3 种高效方法382
素数,也称为质数,是仅被 1 和自身整除的自然数。在计算机科学中,素数判断是一个常见的任务,本文将介绍 Java 中判断素数的三种高效方法。
1. 试除法
试除法是最简单的素数判断方法。其思想是逐个尝试从 2 到 sqrt(n) 的数,如果 n 能被其中任何一个数整除,则 n 不是素数;否则,n 是素数。```java
public static boolean isPrimeTrialDivision(int n) {
if (n 1;
x = (x * x) % mod;
}
return res;
}
```
3. 米勒-拉宾素性检验
米勒-拉宾素性检验是一种比费马小定理更有效的素数判断算法。它基于以下定理:如果 n 是一个合成数,那么存在一个整数 a(称为见证者),使得 a^(n-1) ≡ 1 (mod n) 不成立。我们可以随机选择多个见证者来判断一个数是否为素数。```java
public static boolean isPrimeMillerRabin(int n) {
if (n >= 1;
}
for (int a : new int[]{2, 7, 61}) {
if (witness(a, d, s, n)) return false;
}
return true;
}
private static boolean witness(int a, int d, int s, int n) {
long x = power(a, d, n);
if (x == 1 || x == n - 1) return false;
for (int r = 1; r < s; r++) {
x = (x * x) % n;
if (x == n - 1) return false;
}
return true;
}
```
性能比较
这三种方法的性能差异很大。试除法是最慢的,因为它需要遍历所有小于 sqrt(n) 的数。费马小定理比试除法快,但仍然比米勒-拉宾素性检验慢。米勒-拉宾素性检验是最快的,但它可能会产生错误的负面结果(即错误地认为一个合成数是素数)。
选择建议
在实践中,使用米勒-拉宾素性检验通常是判断大数素数的最佳选择。对于较小的数,费马小定理可能是一个更简单的选择。试除法一般不建议使用,只有在需要判断非常小的数时才使用。
2024-11-14
Java数组元素:从基础到高级操作的深度解析
https://www.shuihudhg.cn/134539.html
PHP Web应用的安全基石:全面解析数据库SQL注入防御
https://www.shuihudhg.cn/134538.html
Python函数入门到进阶:用简洁代码构建高效程序
https://www.shuihudhg.cn/134537.html
PHP中解析与提取代码注释:DocBlock、反射与AST深度探索
https://www.shuihudhg.cn/134536.html
Python深度解析与高效处理.dat文件:从文本到二进制的实战指南
https://www.shuihudhg.cn/134535.html
热门文章
Java中数组赋值的全面指南
https://www.shuihudhg.cn/207.html
JavaScript 与 Java:二者有何异同?
https://www.shuihudhg.cn/6764.html
判断 Java 字符串中是否包含特定子字符串
https://www.shuihudhg.cn/3551.html
Java 字符串的切割:分而治之
https://www.shuihudhg.cn/6220.html
Java 输入代码:全面指南
https://www.shuihudhg.cn/1064.html