Java 代码高效判断质数124
在计算机科学中,判断质数是一项常见的任务。质数是只能被 1 和自身整除的正整数。在某些应用中,快速高效地识别质数至关重要,例如密码学和数据安全。
Java 提供了多种方法来判断质数。以下是一些最常用的方法:
朴素算法
朴素算法是对每个数字从 2 到 sqrt(n) 进行循环,查看它们是否能整除 n。如果任何数字整除 n,则 n 不是质数。```java
public static boolean isPrimeNaive(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i 0) {
if ((b & 1) != 0) {
result = (result * a) % mod;
}
a = (a * a) % mod;
b >>= 1;
}
return result;
}
```
米勒-拉宾素数判定法
米勒-拉宾素数判定法是一种比费马小定理更有效的概率算法。它基于以下事实:对于任何奇素数 n,存在一个称为“原根”的正整数 a,使得对于 1 ≤ k ≤ n-1,a^k mod n 等于 n-1 的某个幂。```java
public static boolean isPrimeMillerRabin(int n) {
if (n < 2) {
return false;
}
int s = 0;
int d = n-1;
while ((d & 1) == 0) {
s++;
d >>= 1;
}
for (int a : new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
if (n % a == 0) {
return false;
}
long x = pow(a, d, n);
if (x == 1 || x == n-1) {
continue;
}
boolean isPrime = false;
for (int r = 1; r < s; r++) {
x = (x * x) % n;
if (x == n-1) {
isPrime = true;
break;
}
}
if (!isPrime) {
return false;
}
}
return true;
}
```
选择算法
哪种算法最适合取决于应用程序的特定要求。对于较小的数字(例如 n < 10^9),朴素算法就足够了。
对于较大的数字,费马小定理提供了比朴素算法更快的确定性算法。米勒-拉宾素数判定法是最有效的算法,但它是一个概率算法,有可能产生错误结果。
在实践中,通常使用米勒-拉宾素数判定法作为第一道筛选,然后使用费马小定理对剩下的数字进行确认。这提供了效率和准确性的最佳折中。
2024-12-05
上一篇:Java 代码混淆:使用 Eclipse 提高应用程序安全性
下一篇:Java 中私有方法的继承
Java方法栈日志的艺术:从错误定位到性能优化的深度指南
https://www.shuihudhg.cn/133725.html
PHP 获取本机端口的全面指南:实践与技巧
https://www.shuihudhg.cn/133724.html
Python内置函数:从核心原理到高级应用,精通Python编程的基石
https://www.shuihudhg.cn/133723.html
Java Stream转数组:从基础到高级,掌握高性能数据转换的艺术
https://www.shuihudhg.cn/133722.html
深入解析:基于Java数组构建简易ATM机系统,从原理到代码实践
https://www.shuihudhg.cn/133721.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