优化NumberUtil.isPrime()方法:

1.优化执行过程, 直接排除偶数;
2.修改函数名, 从复数形式变为单数;
This commit is contained in:
Zjp 2022-11-14 20:23:55 +08:00
parent 19d9717e49
commit bb29b97849
2 changed files with 23 additions and 2 deletions

View File

@ -805,9 +805,16 @@ public class NumberUtil {
* @param n 数字 * @param n 数字
* @return 是否是质数 * @return 是否是质数
*/ */
public static boolean isPrimes(final int n) { public static boolean isPrime(final int n) {
Assert.isTrue(n > 1, "The number must be > 1"); 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) { if (n % i == 0) {
return false; return false;
} }

View File

@ -459,4 +459,18 @@ public class NumberUtilTest {
//noinspection ResultOfMethodCallIgnored //noinspection ResultOfMethodCallIgnored
NumberUtil.range(0, Integer.MIN_VALUE); 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));
}
} }