**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 *d*_{1} be the 1^{st} digit, *d*_{2} be the 2^{nd} digit, and so on. In this way, we note the following:

*d*_{2}*d*_{3}*d*_{4}=406 is divisible by 2*d*_{3}*d*_{4}*d*_{5}=063 is divisible by 3*d*_{4}*d*_{5}*d*_{6}=635 is divisible by 5*d*_{5}*d*_{6}*d*_{7}=357 is divisible by 7*d*_{6}*d*_{7}*d*_{8}=572 is divisible by 11*d*_{7}*d*_{8}*d*_{9}=728 is divisible by 13*d*_{8}*d*_{9}*d*_{10}=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)); }