aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java')
-rw-r--r--challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java b/challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java
new file mode 100644
index 0000000000..57c6971213
--- /dev/null
+++ b/challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java
@@ -0,0 +1,79 @@
+// The Weekly Challenge 147
+// Task 1 Truncatable Prime
+// Friday, January 14, 2022 AM11:26:14 HKT
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Arrays;
+@SuppressWarnings("unchecked")
+
+public class LeftTruncatablePrime
+{
+ public static List<Integer> Primes;
+ public static List<Integer> LTPrimes;
+ public static List<Integer> recentLTPrimes;
+ public static List<Integer> newLTPrimes;
+
+ public static void main(String... args)
+ {
+ Integer[] singleDigitPrimes = {2, 3, 5, 7};
+ Primes = new ArrayList<Integer>();
+ Collections.addAll(Primes, singleDigitPrimes);
+
+ LTPrimes = new ArrayList<Integer>();
+ recentLTPrimes = new ArrayList<Integer>();
+ Collections.addAll(recentLTPrimes, singleDigitPrimes);
+ newLTPrimes = new ArrayList<Integer>();
+ appendPrimes(1000);
+ appendLTPrimes(20);
+
+ for (int i = 0; i < 20; i++)
+ System.out.println(LTPrimes.get(i));
+ }
+
+ public static boolean isPrime(Integer x)
+ {
+ Integer p = 0;
+ for (int i = 0; p <= Math.sqrt(x) ; i++ )
+ {
+ p = Primes.get(i);
+ if (x % p == 0)
+ return false;
+ }
+ return true;
+ }
+
+ public static void appendPrimes(Integer max)
+ {
+ Integer i = Primes.get(Primes.size()-1)+1;
+ while (Primes.get(Primes.size()-1) < max)
+ {
+ if (isPrime(i))
+ Primes.add(i);
+ i++;
+ }
+ }
+
+
+ public static void appendLTPrimes(Integer targetSize)
+ {
+ if (targetSize <= LTPrimes.size() + recentLTPrimes.size())
+ {
+ LTPrimes.addAll(recentLTPrimes);
+ return;
+ }
+ for (int d = 1; d <= 9; d++) {
+ for (Integer num : recentLTPrimes)
+ {
+ int newNum = Integer.parseInt(d + "" + num);
+ if (isPrime(newNum)) {
+ newLTPrimes.add(newNum);
+ }
+ }
+ }
+ LTPrimes.addAll(recentLTPrimes);
+ recentLTPrimes = (List)((ArrayList)newLTPrimes).clone();
+ newLTPrimes.clear();
+ appendLTPrimes(targetSize);
+ }
+}