aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java
diff options
context:
space:
mode:
authorE7-87-83 <fungcheokyin@gmail.com>2022-01-14 11:27:49 +0800
committerE7-87-83 <fungcheokyin@gmail.com>2022-01-14 11:27:49 +0800
commite09bcf4bfee7ea334525bf92554d6da42a373efd (patch)
tree9d221f3bf72dbae769ca58ab7d04d954abfe614c /challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java
parent33336454923f69e42c139f2ec03b35f6fb6abfa2 (diff)
downloadperlweeklychallenge-club-e09bcf4bfee7ea334525bf92554d6da42a373efd.tar.gz
perlweeklychallenge-club-e09bcf4bfee7ea334525bf92554d6da42a373efd.tar.bz2
perlweeklychallenge-club-e09bcf4bfee7ea334525bf92554d6da42a373efd.zip
Java and Smalltalk solutions for Wk 147 Task 1
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);
+ }
+}