Project Euler: Problem 43 – Sub-string divisibility

Problem 43:

The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.
 
Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:

  • d2d3d4=406 is divisible by 2
  • d3d4d5=063 is divisible by 3
  • d4d5d6=635 is divisible by 5
  • d5d6d7=357 is divisible by 7
  • d6d7d8=572 is divisible by 11
  • d7d8d9=728 is divisible by 13
  • d8d9d10=289 is divisible by 17

Find the sum of all 0 to 9 pandigital numbers with this property.

Idea:

Re-used the nextPermutation() method I wrote for problem 24 and started at the largest 0 – 9 pandigital number that started with 0 (because the leading zero is ignored, and the next permutation will start with the smallest true 0 – 9 pandigital number).
 
Simply went though all the permutations, checking the substring divisibility, and adding the number to a running total as I found ones that fit the given characteristics.

BigInteger answer = BigInteger.ZERO;

int[] number = {0,9,8,7,6,5,4,3,2,1}; //last 0-9 pandigital starting w/ 0
while(EulerUtils.Permutation.nextPermutation(number)) {
   String tmp = EulerUtils.intArrayToBigInt(number).toString();
   if(Integer.parseInt(tmp.substring(1,4)) % 2 != 0) {
      continue;
   }
   if(Integer.parseInt(tmp.substring(2,5)) % 3 != 0) {
      continue;
   }
   if(Integer.parseInt(tmp.substring(3,6)) % 5 != 0) {
      continue;
   }
   if(Integer.parseInt(tmp.substring(4,7)) % 7 != 0) {
      continue;
   }
   if(Integer.parseInt(tmp.substring(5,8)) % 11 != 0) {
      continue;
   }
   if(Integer.parseInt(tmp.substring(6,9)) % 13 != 0) {
      continue;
   }
   if(Integer.parseInt(tmp.substring(7,10)) % 17 != 0) {
      continue;
   }
   //if you get here, it's divisible by all the above
   answer = answer.add(EulerUtils.intArrayToBigInt(number));
}
Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *