问题描述:
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);
}
}