MarginaliaSearch/code/libraries/next-prime/java/nu/marginalia/util/NextPrimeUtil.java

43 lines
958 B
Java
Raw Normal View History

2022-05-19 15:45:26 +00:00
package nu.marginalia.util;
public class NextPrimeUtil {
2022-05-19 15:45:26 +00:00
/** Returns the next prime value starting at start. If start is prime, return start.
*/
public static long nextPrime(long start, long direction) {
if (isCoprime(start, 2)) {
start = start + direction;
2022-05-19 15:45:26 +00:00
}
long val;
for (val = start; !isPrime(val); val += 2*direction) {}
2022-05-19 15:45:26 +00:00
return val;
}
public static boolean isPrime(long v) {
if (v <= 2) {
return true;
}
if ((v & 1) == 0) {
return false;
}
for (long t = 3; t <= v/3; t++) {
if ((v % t) == 0) {
return false;
}
}
return true;
}
public static boolean isCoprime(long a, long b) {
2022-05-19 15:45:26 +00:00
if (a == 0 || b == 0) {
return false;
}
if (a > b) {
return (a % b) == 0;
}
return (b % a) == 0;
}
}