package com.levelup.java.number;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.math.BigInteger;
import java.util.List;
import java.util.Random;
import org.apache.commons.math3.primes.Primes;
import org.junit.Ignore;
import org.junit.Test;
/**
* This java example will demonstrate determining if a
* number is prime.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/determine-prime-number/'>Is prime number</a>
*
*/
public class NumberIsPrime {
/**
* Method will determine if n is prime
*
* @param n
* @return boolean
*/
boolean isPrime(int n) {
if (n % 2 == 0) {
return false;
} else {
for(int i=3; i*i <=n; i+=2) {
if(n % i == 0) {
return false;
}
}
}
return true;
}
@Test
public void determine_if_number_is_prime_java () {
boolean isPrimeNumber = isPrime(5779);
assertTrue(isPrimeNumber);
}
@Ignore("due to inconsistencies b/t 5 and 7")
@Test
public void determine_if_number_is_prime_java_big_integer () {
Random rnd = new Random();
BigInteger isPrimeNumber = BigInteger.probablePrime(3, rnd);
assertEquals(5, isPrimeNumber.intValue());
}
@Test
public void determine_if_number_is_prime_java_regular_expresison () {
char n = 5779;
boolean isPrimeNumber = false;
if (!new String(new char[n]).matches(".?|(..+?)\\1+")) {
isPrimeNumber = true;
}
assertTrue(isPrimeNumber);
}
@Test
public void determine_if_number_prime_with_apache_commons () {
boolean isPrimeNumber = Primes.isPrime(5779);
assertTrue(isPrimeNumber);
}
@Test
public void find_next_prime_number_with_apache_commons () {
int nextPrimeNumber = Primes.nextPrime(5780);
assertEquals(5783, nextPrimeNumber);
}
@Test
public void determine_prime_factors_of_a_number_with_apache_commons () {
List<Integer> primeFactors = Primes.primeFactors(5782);
assertThat(primeFactors, hasItems(2, 7, 7, 59));
}
}