Pages

Wednesday, September 9, 2009

Euler Problem 41 solution

Time (s): ~0.009
package margusmartseppcode.From_40_to_49;

import java.util.HashSet;
import java.util.Set;

public class Problem_41 {
 static final int nbrs = 7;

 static boolean isPandigital(String s) {
  return isPandigital(s, nbrs);
 }

 static boolean isPandigital(String s, int nr) {
  if (s.length() != nr)
   return false;

  Set<Character> set = new HashSet<Character>();
  for (int i = 0; i < nr; i++)
   set.add(s.charAt(i));

  if (set.size() != nr)
   return false;
  if (set.contains('0'))
   return false;
  if (set.contains('8'))
   return false;
  if (set.contains('9'))
   return false;
  return true;
 }

 // Call only if: (n>0&&(i%2==0||i%3==0||i%5==0||i%7==0))
 static boolean isPrimeS(final int n) {
  final int r = (int) Math.floor(Math.sqrt(n));
  for (int f = 5; f <= r; f += 6)
   if (n % f == 0 || n % (f + 2) == 0)
    return false;
  return true;
 }

 public static void main(String[] args) {
  int i;
  for (i = 7654321; i >= 1234567; i -= 2) {
   if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0)
    continue;
   if (!isPrimeS(i))
    continue;
   if (isPandigital("" + i))
    break;
  }
  System.out.println(i);
 }
}

No comments:

Post a Comment