Skip to content

Commit 0960edb

Browse files
committed
Change prime factor implementation to recursive
1 parent 7b78bd1 commit 0960edb

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

src/main/java/edu/thoughtworks/training/PrimeFactor.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,27 @@
44
import java.util.Collection;
55

66
public class PrimeFactor {
7-
public Collection<Integer> generate(int input) {
8-
Collection<Integer> primeFactors = new ArrayList<Integer>();
9-
for (int i = 2; i <= Math.sqrt(input); ++i) {
10-
if (input % i == 0) {
11-
primeFactors.add(i);
12-
input /= i;
13-
}
147

15-
}
16-
if (input != 1) primeFactors.add(input);
8+
private static final int FIRST_PRIME = 2;
179

10+
public Collection<Integer> generate(int number) {
11+
Collection<Integer> primeFactors = new ArrayList<>();
12+
generate(number, FIRST_PRIME,primeFactors);
1813
return primeFactors;
1914
}
15+
16+
private void generate(final int number, final int possiblePrimeFactor, final Collection<Integer> primeFactors) {
17+
if (number != 1) {
18+
if (isDivisibleBy(number, possiblePrimeFactor)) {
19+
primeFactors.add(possiblePrimeFactor);
20+
generate(number/possiblePrimeFactor, possiblePrimeFactor, primeFactors);
21+
} else {
22+
generate(number, possiblePrimeFactor+1, primeFactors);
23+
}
24+
}
25+
}
26+
27+
private boolean isDivisibleBy(final int number, final int possiblePrimeFactor) {
28+
return number % possiblePrimeFactor == 0;
29+
}
2030
}

0 commit comments

Comments
 (0)