素数判断优化

This commit is contained in:
asukavuuyn
2025-09-08 01:47:12 +08:00
parent 170492957f
commit 23b60cd9cc
2 changed files with 22 additions and 4 deletions

View File

@@ -1342,10 +1342,11 @@ public class NumberUtil {
*/
public static boolean isPrimes(int n) {
Assert.isTrue(n > 1, "The number must be > 1");
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
if (n <= 3) return true;
if ((n & 1) == 0) return false;
if (n % 3 == 0) return false;
for (int i = 5; i <= n / i; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}

View File

@@ -605,6 +605,23 @@ public class NumberUtilTest {
assertFalse(NumberUtil.isDouble(" "));
}
@Test
public void isPrimesTest() {
assertTrue(NumberUtil.isPrimes(2));
assertTrue(NumberUtil.isPrimes(3));
assertFalse(NumberUtil.isPrimes(4));
assertTrue(NumberUtil.isPrimes(5));
assertTrue(NumberUtil.isPrimes(7));
assertFalse(NumberUtil.isPrimes(9));
assertTrue(NumberUtil.isPrimes(13));
assertFalse(NumberUtil.isPrimes(25));
assertFalse(NumberUtil.isPrimes(49));
assertTrue(NumberUtil.isPrimes(113));
assertFalse(NumberUtil.isPrimes(121));
assertTrue(NumberUtil.isPrimes(2147483647));
assertFalse(NumberUtil.isPrimes(2147483646));
}
@Test
public void range(){
assertFalse(NumberUtil.isIn(new BigDecimal("1"),new BigDecimal("2"),new BigDecimal("12")));