From bb29b97849ac6e50773e972a7618714bfd38a72e Mon Sep 17 00:00:00 2001 From: Zjp <1215582715@qq.com> Date: Mon, 14 Nov 2022 20:23:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96NumberUtil.isPrime()=E6=96=B9?= =?UTF-8?q?=E6=B3=95:=201.=E4=BC=98=E5=8C=96=E6=89=A7=E8=A1=8C=E8=BF=87?= =?UTF-8?q?=E7=A8=8B,=20=E7=9B=B4=E6=8E=A5=E6=8E=92=E9=99=A4=E5=81=B6?= =?UTF-8?q?=E6=95=B0;=202.=E4=BF=AE=E6=94=B9=E5=87=BD=E6=95=B0=E5=90=8D,?= =?UTF-8?q?=20=E4=BB=8E=E5=A4=8D=E6=95=B0=E5=BD=A2=E5=BC=8F=E5=8F=98?= =?UTF-8?q?=E4=B8=BA=E5=8D=95=E6=95=B0;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/hutool/core/math/NumberUtil.java | 11 +++++++++-- .../java/cn/hutool/core/util/NumberUtilTest.java | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java b/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java index 9d5152290..90cdf7c84 100644 --- a/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java @@ -805,9 +805,16 @@ public class NumberUtil { * @param n 数字 * @return 是否是质数 */ - public static boolean isPrimes(final int n) { + public static boolean isPrime(final int n) { Assert.isTrue(n > 1, "The number must be > 1"); - for (int i = 2; i <= Math.sqrt(n); i++) { + if (n <= 3) { + return true; + } else if ((n & 1) == 0) { + // 快速排除偶数 + return false; + } + final int end = (int) Math.sqrt(n); + for (int i = 3; i <= end; i += 2) { if (n % i == 0) { return false; } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java index 0089c0481..69e67d368 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java @@ -459,4 +459,18 @@ public class NumberUtilTest { //noinspection ResultOfMethodCallIgnored NumberUtil.range(0, Integer.MIN_VALUE); } + + @Test + public void isPrimeTest(){ + Assert.assertTrue(NumberUtil.isPrime(2)); + Assert.assertTrue(NumberUtil.isPrime(3)); + Assert.assertTrue(NumberUtil.isPrime(7)); + Assert.assertTrue(NumberUtil.isPrime(17)); + Assert.assertTrue(NumberUtil.isPrime(296731)); + Assert.assertTrue(NumberUtil.isPrime(99999989)); + + Assert.assertFalse(NumberUtil.isPrime(4)); + Assert.assertFalse(NumberUtil.isPrime(296733)); + Assert.assertFalse(NumberUtil.isPrime(20_4123_2399)); + } }