diff --git a/java/append_primes/Main.java b/java/append_primes/Main.java index 3ab99c0..6c0fd65 100644 --- a/java/append_primes/Main.java +++ b/java/append_primes/Main.java @@ -1,3 +1,5 @@ +package append_primes; + import java.util.ArrayList; public class Main @@ -6,8 +8,11 @@ public class Main { Util.init(); - Tree tree = new Tree(0, new ArrayList()); - for (int i = 0; i < 9; i++) { + /* By changing the args[0] we can modify which prime we want to be the + * first in the row. Same for the number of iteration. + */ + Tree tree = new Tree(Integer.parseInt(args[0]), new ArrayList()); + for (int i = 0; i < Integer.parseInt(args[1]); i++) { tree.step(); Util.printList(tree.longestPath()); } diff --git a/java/append_primes/Tree.java b/java/append_primes/Tree.java index bf90421..b22b1b6 100644 --- a/java/append_primes/Tree.java +++ b/java/append_primes/Tree.java @@ -1,3 +1,5 @@ +package append_primes; + import java.util.ArrayList; class Tree diff --git a/java/append_primes/Util.java b/java/append_primes/Util.java index a400834..7b6aceb 100644 --- a/java/append_primes/Util.java +++ b/java/append_primes/Util.java @@ -1,4 +1,8 @@ +package append_primes; + import java.util.HashMap; +import java.util.Iterator; +import java.util.stream.IntStream; import java.util.ArrayList; class Util @@ -14,6 +18,8 @@ class Util public static boolean isPrime(long val) { + // Add 2 to the HashMap in advance in order to quickly exclude even number later + primes.put(2l, true); if (primes.containsKey(val)) { return primes.get(val); } @@ -21,14 +27,16 @@ class Util primes.put(val, false); return false; } - for (int i = 2; i * i <= val; i++) { - if (val % i == 0) { - primes.put(val, false); - return false; - } - } - primes.put(val, true); - return true; + /* I tried to make this process more readable but I'm not sure about the efficiency + * TODO check the efficiency of this new method + */ + boolean temp = (val % 2) != 0 + && + IntStream.rangeClosed(3, (int) Math.sqrt(val)) + .filter(n -> n % 2 != 0) + .noneMatch(n -> (val % n == 0)); + primes.put(val, temp); + return temp; } public static boolean isSquareFree(long val) @@ -48,14 +56,14 @@ class Util return true; } + // Did some cleaning to this util method public static void printList(ArrayList ls) { - System.out.print("["); - for (int i = 0; i < ls.size() - 1; i++) { - System.out.print(ls.get(i)); - System.out.print(", "); - } - System.out.print(ls.get(ls.size() - 1)); + Iterator it = ls.iterator(); + System.out.printf("[%s",it.next()); + do{ + System.out.printf(", %s", it.next()); + }while(it.hasNext()); System.out.print("]\n"); } } diff --git a/java/template/Main.java b/java/template/Main.java index d17bd03..ec499fa 100644 --- a/java/template/Main.java +++ b/java/template/Main.java @@ -1,3 +1,5 @@ +package template; + import java.util.ArrayList; /* Here is where you can tweak the starting conditions */ @@ -10,7 +12,7 @@ public class Main /* here we create a new list with value 0 and no children and check 20 * iterations, feel free to tweak this to your heart's content */ - Tree tree = new Tree(0, new ArrayList()); + Tree tree = new Tree(2, new ArrayList()); for (int i = 0; i < 20; i++) { tree.step(); Util.printList(tree.longestPath()); diff --git a/java/template/Tree.java b/java/template/Tree.java index 4252ff2..c5ed036 100644 --- a/java/template/Tree.java +++ b/java/template/Tree.java @@ -1,3 +1,5 @@ +package template; + import java.util.ArrayList; /* Basic tree stuff. I wouldn't recommend tweaking this unless you have some diff --git a/java/template/Util.java b/java/template/Util.java index 80404f5..a025ba0 100644 --- a/java/template/Util.java +++ b/java/template/Util.java @@ -1,3 +1,5 @@ +package template; + import java.util.HashMap; import java.util.ArrayList;