問題描述:
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.
What is the largest n-digit pandigital prime that exists?
解決問題:
這題和Problem24差不多。都是全排列的問題。
不過這裏我們得找到所有的排列數字。然後判斷是否是素數。
P24是讓我們找到第n個排列,我們可以從1一直找到最後一個~
不過使用24的方法肯定是不行的。
最好的方法就是從小到大挨個找。
這裏使用遞歸的方法。
假如找到4位數的全排列,n4n3n2n1
先令初始的可以選擇的數爲{1,2,3,4}
令n1=1,則n2只能在{1,2,3,4}-{1} = {2,3,4}的集合裏找
再n2=2,則n3只能在{2,3,4}-{2}={3,4}的幾個裏找
算法:
public static void find(int level, boolean[] elements, long result) {
if (level == 1) {
if(IsPrime(result)){
if(max<result)
max = result;
}
// System.out.println(result);
return;
}
for (int i = 1; i < elements.length; i++) {
if (elements[i]) {
elements[i] = false;
long tmp = result;
result = result * 10 + i;
find(level - 1, elements, result);
elements[i] = true;
result = tmp;
}
// System.out.println("Level:"+level+",i:"+i+",Result:"+result);
}
}