diff --git a/commons-numbers-primes/pom.xml b/commons-numbers-primes/pom.xml
index 76e2de4b9..3e2e586ef 100644
--- a/commons-numbers-primes/pom.xml
+++ b/commons-numbers-primes/pom.xml
@@ -40,5 +40,11 @@
${basedir}/..
primes
+
+
+ org.apache.commons
+ commons-numbers-core
+
+
diff --git a/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/Primes.java b/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/Primes.java
index 860678d15..1e6a4de67 100644
--- a/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/Primes.java
+++ b/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/Primes.java
@@ -18,6 +18,7 @@
import java.text.MessageFormat;
import java.util.List;
+import org.apache.commons.numbers.core.ArithmeticUtils;
/**
* Methods related to prime numbers in the range of int.
@@ -112,4 +113,44 @@ public static List primeFactors(int n) {
}
return SmallPrimes.trialDivision(n);
}
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ public static boolean areRelativePrimes(final int x, final int y) {
+ return SmallPrimes.areRelativePrimes(x, y);
+ }
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ public static boolean areRelativePrimes(final int x, final long y) {
+ return SmallPrimes.areRelativePrimes(x, y);
+ }
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ public static boolean areRelativePrimes(final long x, final int y) {
+ return SmallPrimes.areRelativePrimes(x, y);
+ }
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ public static boolean areRelativePrimes(final long x, final long y) {
+ return SmallPrimes.areRelativePrimes(x, y);
+ }
}
diff --git a/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/SmallPrimes.java b/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/SmallPrimes.java
index 5cac3c666..cd448ed78 100644
--- a/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/SmallPrimes.java
+++ b/commons-numbers-primes/src/main/java/org/apache/commons/numbers/primes/SmallPrimes.java
@@ -24,6 +24,7 @@
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
+import org.apache.commons.numbers.core.ArithmeticUtils;
/**
* Utility methods to work on primes within the int range.
@@ -286,4 +287,44 @@ static boolean millerRabinPrimeTest(final int n) {
}
return true; // definitely prime
}
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ static boolean areRelativePrimes(final int x, final int y) {
+ return ArithmeticUtils.gcd(x, y) == 1;
+ }
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ static boolean areRelativePrimes(final int x, final long y) {
+ return ArithmeticUtils.gcd(x, y) == 1;
+ }
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ static boolean areRelativePrimes(final long x, final int y) {
+ return ArithmeticUtils.gcd(x, y) == 1;
+ }
+
+ /**
+ * Checks if the absolute value of the 2 given integers are relative primes.
+ * @param x first integer to check.
+ * @param y second integer to check.
+ * @return true/false i.e. if the arguments are relative primes.
+ */
+ static boolean areRelativePrimes(final long x, final long y) {
+ return ArithmeticUtils.gcd(x, y) == 1;
+ }
}
diff --git a/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/PrimesTest.java b/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/PrimesTest.java
index d1140faf1..c075e59b1 100644
--- a/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/PrimesTest.java
+++ b/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/PrimesTest.java
@@ -167,4 +167,77 @@ void testPrimeFactors() {
Assertions.assertEquals(1, factors.size());
}
}
+
+
+ @Test
+ void areRelativePrimes_int_int() {
+ Assertions.assertTrue(Primes.areRelativePrimes(-10, -17));
+ Assertions.assertTrue(Primes.areRelativePrimes(10, 17));
+ Assertions.assertFalse(Primes.areRelativePrimes(10, 20));
+ Assertions.assertFalse(Primes.areRelativePrimes(-10, -20));
+ Assertions.assertFalse(Primes.areRelativePrimes(0, -20));
+ Assertions.assertFalse(Primes.areRelativePrimes(0, 20));
+ Assertions.assertTrue(Primes.areRelativePrimes(0, 1));
+ Assertions.assertFalse(Primes.areRelativePrimes(0, 100));
+ Assertions.assertTrue(Primes.areRelativePrimes(1, 1));
+ Assertions.assertTrue(Primes.areRelativePrimes(1, 2));
+ Assertions.assertTrue(Primes.areRelativePrimes(1, 26));
+ Assertions.assertFalse(Primes.areRelativePrimes(2, 2));
+ Assertions.assertTrue(Primes.areRelativePrimes(2, 3));
+ Assertions.assertFalse(Primes.areRelativePrimes(2, 4));
+ Assertions.assertTrue(Primes.areRelativePrimes(2, 17));
+ Assertions.assertFalse(Primes.areRelativePrimes(200, 64000));
+ Assertions.assertTrue(Primes.areRelativePrimes(200, 64001));
+ }
+
+ @Test
+ void areRelativePrimes_int_long() {
+ Assertions.assertTrue(Primes.areRelativePrimes(-10, -17L));
+ Assertions.assertTrue(Primes.areRelativePrimes(10, 17L));
+ Assertions.assertFalse(Primes.areRelativePrimes(0, -20L));
+ Assertions.assertFalse(Primes.areRelativePrimes(0, 20L));
+ Assertions.assertTrue(Primes.areRelativePrimes(0, 1L));
+ Assertions.assertTrue(Primes.areRelativePrimes(1, 1L));
+ Assertions.assertTrue(Primes.areRelativePrimes(1, 26L));
+ Assertions.assertTrue(Primes.areRelativePrimes(2, 3L));
+ Assertions.assertFalse(Primes.areRelativePrimes(2, 4L));
+ Assertions.assertFalse(Primes.areRelativePrimes(200, 64000L));
+ Assertions.assertFalse(Primes.areRelativePrimes(200, 64000000000L));
+ Assertions.assertTrue(Primes.areRelativePrimes(200, 64000000001L));
+ }
+
+ @Test
+ void areRelativePrimes_long_int() {
+ Assertions.assertTrue(Primes.areRelativePrimes(-10L, -17));
+ Assertions.assertTrue(Primes.areRelativePrimes(10L, 17));
+ Assertions.assertFalse(Primes.areRelativePrimes(0L, -20));
+ Assertions.assertFalse(Primes.areRelativePrimes(0L, 20));
+ Assertions.assertTrue(Primes.areRelativePrimes(0L, 1));
+ Assertions.assertTrue(Primes.areRelativePrimes(1L, 1));
+ Assertions.assertTrue(Primes.areRelativePrimes(1L, 26));
+ Assertions.assertTrue(Primes.areRelativePrimes(2L, 3));
+ Assertions.assertFalse(Primes.areRelativePrimes(2L, 4));
+ Assertions.assertFalse(Primes.areRelativePrimes(200L, 64000));
+ Assertions.assertFalse(Primes.areRelativePrimes(64000000000L, 200));
+ Assertions.assertTrue(Primes.areRelativePrimes(64000000001L, 200));
+ }
+
+ @Test
+ void areRelativePrimes_long_long() {
+ Assertions.assertTrue(Primes.areRelativePrimes(-10L, -17L));
+ Assertions.assertTrue(Primes.areRelativePrimes(10L, 17L));
+ Assertions.assertFalse(Primes.areRelativePrimes(0L, -20L));
+ Assertions.assertFalse(Primes.areRelativePrimes(0L, 20L));
+ Assertions.assertTrue(Primes.areRelativePrimes(0L, 1L));
+ Assertions.assertTrue(Primes.areRelativePrimes(1L, 1L));
+ Assertions.assertTrue(Primes.areRelativePrimes(1L, 26L));
+ Assertions.assertTrue(Primes.areRelativePrimes(2L, 3L));
+ Assertions.assertFalse(Primes.areRelativePrimes(2L, 4L));
+ Assertions.assertFalse(Primes.areRelativePrimes(200L, 64000L));
+ Assertions.assertFalse(Primes.areRelativePrimes(64000000000L, 200L));
+ Assertions.assertTrue(Primes.areRelativePrimes(64000000001L, 200L));
+ Assertions.assertFalse(Primes.areRelativePrimes(64000000000L, 32000000000L));
+ Assertions.assertTrue(Primes.areRelativePrimes(64000000000L, 32000000001L));
+ Assertions.assertTrue(Primes.areRelativePrimes(64000000001L, 32000000000L));
+ }
}
diff --git a/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/SmallPrimesTest.java b/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/SmallPrimesTest.java
index 7bf1af302..95fd0521c 100644
--- a/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/SmallPrimesTest.java
+++ b/commons-numbers-primes/src/test/java/org/apache/commons/numbers/primes/SmallPrimesTest.java
@@ -143,4 +143,76 @@ void millerRabinPrimeTest_composites() {
}
}
}
+
+ @Test
+ void areRelativePrimes_int_int() {
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(-10, -17));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(10, 17));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(10, 20));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(-10, -20));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0, -20));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0, 20));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(0, 1));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0, 100));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1, 1));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1, 2));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1, 26));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(2, 2));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(2, 3));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(2, 4));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(2, 17));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(200, 64000));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(200, 64001));
+ }
+
+ @Test
+ void areRelativePrimes_int_long() {
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(-10, -17L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(10, 17L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0, -20L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0, 20L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(0, 1L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1, 1L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1, 26L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(2, 3L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(2, 4L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(200, 64000L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(200, 64000000000L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(200, 64000000001L));
+ }
+
+ @Test
+ void areRelativePrimes_long_int() {
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(-10L, -17));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(10L, 17));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0L, -20));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0L, 20));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(0L, 1));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1L, 1));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1L, 26));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(2L, 3));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(2L, 4));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(200L, 64000));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(64000000000L, 200));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(64000000001L, 200));
+ }
+
+ @Test
+ void areRelativePrimes_long_long() {
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(-10L, -17L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(10L, 17L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0L, -20L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(0L, 20L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(0L, 1L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1L, 1L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(1L, 26L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(2L, 3L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(2L, 4L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(200L, 64000L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(64000000000L, 200L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(64000000001L, 200L));
+ Assertions.assertFalse(SmallPrimes.areRelativePrimes(64000000000L, 32000000000L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(64000000000L, 32000000001L));
+ Assertions.assertTrue(SmallPrimes.areRelativePrimes(64000000001L, 32000000000L));
+ }
}