Skip to content

Commit b4c9a23

Browse files
Better way to check a number for Prime. Update PrimeCheck.java
The function does this by 1. Skip even numbers (except 2) since they are not prime. 2. Skip multiples of 3 after checking 3. 3. Start checking for factors from 5 and use the 6k ± 1 optimization. This is based on the fact that any prime number greater than 3 can be expressed as 6k ± 1. This helps to make it much more efficient for large numbers.
1 parent 7054535 commit b4c9a23

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/main/java/com/thealgorithms/maths/PrimeCheck.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ public static void main(String[] args) {
2222
} else {
2323
System.out.println("algo2 verify that " + n + " is not a prime number");
2424
}
25+
26+
if (isPrimeNumberOptimised(Long.MAX_VALUE)) {
27+
System.out.println("algo4 verify that " + Long.MAX_VALUE + " is a prime number");
28+
} else {
29+
System.out.println("algo4 verify that " + Long.MAX_VALUE + " is not a prime number");
30+
}
2531
scanner.close();
2632
}
2733

@@ -82,4 +88,28 @@ private static long modPow(long a, long b, long c) {
8288
}
8389
return res % c;
8490
}
91+
92+
/**
93+
* Checks if a given number is prime using an optimized approach.
94+
*
95+
* @param number the number to check
96+
* @return true if the number is prime, false otherwise
97+
*/
98+
public static boolean isPrimeNumberOptimised(long number) {
99+
// Numbers less than or equal to 1 are not prime
100+
if (number <= 1) return false;
101+
// Numbers 2 and 3 are prime
102+
if (number <= 3) return true;
103+
// Eliminate even numbers and multiples of 3
104+
if (number % 2 == 0 || number % 3 == 0) return false;
105+
// Check for factors from 5 onwards using the 6k ± 1 optimization
106+
for (long i = 5; (i * i) <= number; i += 6) {
107+
// Check if the number is divisible by i or (i + 2)
108+
if (number % i == 0 || number % (i + 2) == 0) {
109+
return false;
110+
}
111+
}
112+
// If no factors are found, the number is prime
113+
return true;
114+
}
85115
}

0 commit comments

Comments
 (0)