Advertisement
Guest User

Untitled

a guest
Oct 18th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.12 KB | None | 0 0
  1.     private static List<Integer> primes = new ArrayList<>();
  2.  
  3.     public static int[] sameFactRev(int nMax) {
  4.         primes = getPrimes(nMax-1);
  5.         List<Integer> sameFact = IntStream.range(1089, nMax).
  6.                 filter(n -> !isPalindrome(n)).
  7.                 filter(App::sameFactors).
  8.                 boxed().
  9.                 collect(Collectors.toList());
  10.         return sameFact.stream().mapToInt(i -> i).toArray();
  11.     }
  12.  
  13.     private static boolean sameFactors(int i) {
  14.         Set<Integer> factors = getPrimeFactors(i);
  15.         Set<Integer> reversedFactors = getPrimeFactors(reverseInt(i));
  16.         return factors.equals(reversedFactors);
  17.     }
  18.  
  19.     private static int reverseInt(int n) {
  20.         StringBuilder number = new StringBuilder(Integer.toString(n));
  21.         number.reverse();
  22.         return Integer.parseInt(number.toString());
  23.     }
  24.  
  25.     private static Set<Integer> getPrimeFactors(int n) {
  26.         Set<Integer> factors = new TreeSet<>();
  27.         int primeId = 0;
  28.         while (primeId != primes.size() && n >= primes.get(primeId)) {
  29.             if (n % primes.get(primeId) == 0) {
  30.                 n = n / primes.get(primeId);
  31.                 factors.add(primes.get(primeId));
  32.             } else {
  33.                 primeId++;
  34.             }
  35.         }
  36.         return factors;
  37.     }
  38.  
  39.     private static boolean isPalindrome(int n) {
  40.         StringBuilder number = new StringBuilder(Integer.toString(n));
  41.         return n == Integer.parseInt(number.reverse().toString());
  42.     }
  43.  
  44.     private static List<Integer> getPrimes(int n) {
  45.         int length = String.valueOf(n).length();
  46.         StringBuilder sb = new StringBuilder();
  47.         for (int i = 0; i < length; i++) {
  48.             sb.append(9);
  49.         }
  50.         return IntStream.rangeClosed(2, Integer.parseInt(sb.toString()))
  51.                 .filter(App::isPrime)
  52.                 .boxed()
  53.                 .collect(Collectors.toList());
  54.     }
  55.  
  56.     private static boolean isPrime(int n) {
  57.         OptionalInt s = IntStream.range(3, n)
  58.                 .filter(x -> n % x == 0)
  59.                 .findFirst();
  60.         return !s.isPresent();
  61.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement