diff --git a/src/main/java/com/odde/tdd/PrimeFactorization.java b/src/main/java/com/odde/tdd/PrimeFactorization.java new file mode 100644 index 0000000..600cf24 --- /dev/null +++ b/src/main/java/com/odde/tdd/PrimeFactorization.java @@ -0,0 +1,32 @@ +package com.odde.tdd; + +import java.util.ArrayList; + +public class PrimeFactorization { + public ArrayList run(int n) + { + ArrayList factors = new ArrayList(); + //invalid cases + if( n < 2 ) + return factors; + + //take 2 out to speed up + while (n % 2 == 0) { + factors.add(2); + n /= 2; + } + + for (int i = 3; i <= Math.sqrt(n); i += 2) { + while (n % i == 0) { + factors.add(i); + n /= i; + } + } + + //the last one + if (n > 1) + factors.add(n); + + return factors; + } +} diff --git a/src/test/java/com/odde/tdd/PrimeFactorsTest.java b/src/test/java/com/odde/tdd/PrimeFactorsTest.java new file mode 100644 index 0000000..a40000f --- /dev/null +++ b/src/test/java/com/odde/tdd/PrimeFactorsTest.java @@ -0,0 +1,49 @@ +package com.odde.tdd; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; + +public class PrimeFactorsTest { + @Test + public void invalid_num() + { + PrimeFactorization pf = new PrimeFactorization(); + ArrayList result1 = pf.run(-1); + ArrayList result2 = pf.run(0); + ArrayList result3 = pf.run(1); + assertEquals(Arrays.asList(), result1); + assertEquals(Arrays.asList(), result2); + assertEquals(Arrays.asList(), result3); + return; + } + + @Test + public void prime_num() + { + PrimeFactorization pf = new PrimeFactorization(); + ArrayList result1 = pf.run(2); + ArrayList result2 = pf.run(3); + ArrayList result3 = pf.run(17); + assertEquals(Arrays.asList(2), result1); + assertEquals(Arrays.asList(3), result2); + assertEquals(Arrays.asList(17), result3); + return; + } + + @Test + public void nonprime_num() + { + PrimeFactorization pf = new PrimeFactorization(); + ArrayList result1 = pf.run(20); + ArrayList result2 = pf.run(456); + ArrayList result3 = pf.run(789); + assertEquals(Arrays.asList(2,2,5), result1); + assertEquals(Arrays.asList(2, 2, 2, 3, 19), result2); + assertEquals(Arrays.asList(3, 263), result3); + return; + } +}