diff options
| author | drbaggy <js5@sanger.ac.uk> | 2022-01-17 09:00:14 +0000 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2022-01-17 09:00:14 +0000 |
| commit | 990d5177887cda20c8a4804b91afe5e9bcaaf201 (patch) | |
| tree | 8c2ae1ac10ff43e872f3cab2611255c76841f4c3 /challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java | |
| parent | dd99d53e09a332c4ff5153b8bb54c9506a03860d (diff) | |
| parent | ee9f8c8288170dc442f8199fc1d2f7e45ac4377c (diff) | |
| download | perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.tar.gz perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.tar.bz2 perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.zip | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java')
| -rw-r--r-- | challenge-147/cheok-yin-fung/java/LeftTruncatablePrime.java | 79 |
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); + } +} |
