Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions commons-numbers-primes/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,11 @@
<numbers.parent.dir>${basedir}/..</numbers.parent.dir>
<numbers.jira.component>primes</numbers.jira.component>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-numbers-core</artifactId>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -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 <code>int</code>.
Expand Down Expand Up @@ -112,4 +113,44 @@ public static List<Integer> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 <code>int</code> range.
Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}