Guest User

Untitled

a guest
Sep 13th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 3.38 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3.  
  4. public class PrimeNumbers {
  5.  
  6.     /**
  7.      * Returns the prime numbers between nMin (included) and nMax (included)
  8.      * @param nMin
  9.      * @param nMax
  10.      * @return
  11.      */
  12.     public Integer[] between(Integer nMin, Integer nMax) {
  13.         if (nMin < 1)   {   //make sure nMin is not less than 1
  14.             nMin = 1;
  15.         }
  16.         if (nMax < nMin) {
  17.             return new Integer[0];
  18.         }
  19.  
  20.         return primeNumbersFrom1ToN(nMin,  nMax);
  21.     }
  22.  
  23.  
  24.     private Integer[] primeNumbersFrom1ToN(Integer min, Integer max) {
  25.         boolean[] prime = new boolean[max+1];
  26.         Arrays.fill(prime, true);
  27.  
  28.         for (int counter = 2; counter <= max; counter ++) {
  29.             if (prime[counter]) {
  30.                 markMultiplesAsNotPrime(counter, max, prime);
  31.             }
  32.         }
  33.         return extractPrimesFromArray(prime, min, max);
  34.     }
  35.  
  36.     private void markMultiplesAsNotPrime(Integer basePrime, Integer max, boolean[] prime) {
  37.         for (int multiplier = 2; basePrime * multiplier <= max; multiplier++) {
  38.             prime[basePrime * multiplier] = false;
  39.         }
  40.     }
  41.  
  42.     private Integer[] extractPrimesFromArray(boolean[] prime, Integer min, Integer max) {
  43.         ArrayList<Integer> primeNumbers = new ArrayList<Integer>();
  44.         for (int number = min; number <= max; number++) {
  45.             if(prime[number]) {
  46.                 primeNumbers.add(number);
  47.             }
  48.         }
  49.         return primeNumbers.toArray(new Integer[primeNumbers.size()]);
  50.     }
  51.  
  52.  
  53. }
  54.  
  55.  
  56. /* Test follows */
  57.  
  58.  
  59. import junit.framework.Assert;
  60. import org.junit.Test;
  61.  
  62. public class PrimeNumbersTest {
  63.  
  64.     @Test
  65.     public void primeNumberGeneratorReturnsSomething() {
  66.         Assert.assertNotNull(new PrimeNumbers().between(1,1));
  67.     }
  68.  
  69.  
  70.     @Test
  71.     public void primeNumberGeneratorWorksWith1() {
  72.         Integer[] arrayOfOne = new PrimeNumbers().between(1, 1);
  73.         Assert.assertEquals(1, arrayOfOne.length);
  74.         Assert.assertEquals(1, arrayOfOne[0].intValue());
  75.     }
  76.  
  77.     @Test
  78.     public void primeNumberGeneratorWorksWith3() {
  79.         Integer[] arrayOfOne = new PrimeNumbers().between(1, 10);
  80.         Assert.assertEquals(5, arrayOfOne.length);
  81.         Assert.assertEquals(1, arrayOfOne[0].intValue());
  82.         Assert.assertEquals(2, arrayOfOne[1].intValue());
  83.         Assert.assertEquals(3, arrayOfOne[2].intValue());
  84.         Assert.assertEquals(5, arrayOfOne[3].intValue());
  85.         Assert.assertEquals(7, arrayOfOne[4].intValue());
  86.     }
  87.  
  88.     @Test
  89.     public void primeNumberGeneratorWorksWithInterval() {
  90.         Integer[] arrayOfOne = new PrimeNumbers().between(6, 23);
  91.         Assert.assertEquals(6, arrayOfOne.length);
  92.         Assert.assertEquals(7, arrayOfOne[0].intValue());
  93.         Assert.assertEquals(11, arrayOfOne[1].intValue());
  94.         Assert.assertEquals(13, arrayOfOne[2].intValue());
  95.         Assert.assertEquals(17, arrayOfOne[3].intValue());
  96.         Assert.assertEquals(19, arrayOfOne[4].intValue());
  97.         Assert.assertEquals(23, arrayOfOne[5].intValue());
  98.     }
  99.  
  100.     @Test
  101.     public void doesntBreakWithNegativeMin() {
  102.         Integer[] arrayOfOne = new PrimeNumbers().between(-100, 10);
  103.         Assert.assertEquals(5, arrayOfOne.length);
  104.     }
  105.  
  106.     @Test
  107.     public void doesntBreakWithNegativeMax() {
  108.         Integer[] arrayOfOne = new PrimeNumbers().between(1, -10);
  109.         Assert.assertEquals(0, arrayOfOne.length);
  110.     }
  111.  
  112.     @Test
  113.     public void doesntBreakWithMinAndMaxNegative() {
  114.         Integer[] arrayOfOne = new PrimeNumbers().between(-100, -10);
  115.         Assert.assertEquals(0, arrayOfOne.length);
  116.     }
  117.  
  118.     @Test
  119.     public void returnsEmptyWhenMaxIsLessThanMin() {
  120.         Integer[] arrayOfOne = new PrimeNumbers().between(100, 10);
  121.         Assert.assertEquals(0, arrayOfOne.length);
  122.     }
  123. }
Add Comment
Please, Sign In to add comment