Problem 41

問題描述:

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);
		}
	}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章