您的位置:首页 > 其它

一道关于素数的问题

2009-05-11 15:53 225 查看
【题目要求】

将1-20这20个连续的自然数排成一圈,使任意2个相邻的自然数之和为素数。

【解法】

package test;
import java.util.HashMap;
import java.util.Map;
/**
* 将1-20这20个自然数排成一圈,使任意2个相邻的自然数之和为素数。
*/
public class PrimeNumberRing {
private static final int N = 20;
private Map<Integer, String> primeNumMap = new HashMap<Integer, String>();
private Map<Integer, String> useNumMap = new HashMap<Integer, String>();
private int[] resArray = new int[N + 1];
public PrimeNumberRing() {
primeNumMap.put(2, "");
primeNumMap.put(3, "");
primeNumMap.put(5, "");
primeNumMap.put(7, "");
primeNumMap.put(11, "");
primeNumMap.put(13, "");
primeNumMap.put(17, "");
primeNumMap.put(19, "");
primeNumMap.put(23, "");
primeNumMap.put(29, "");
primeNumMap.put(31, "");
primeNumMap.put(37, "");
resArray[0] = N;
resArray
= N;
useNumMap.put(N, "");
}
public void getResult() {
realCal(N - 1);
for (int num = 1; num <= N; num++) {
System.out.print(resArray[num] + "   ");
}
}
private boolean realCal(int num) {
if (num == 0) {
if (primeNumMap.containsKey(resArray[0] + resArray[1]))
return true;
else
return false;
}
for (int i = N - 1; i > 0; i--) {
if (useNumMap.containsKey(i))
continue;
if (primeNumMap.containsKey(i + resArray[num + 1])) {
resArray[num] = i;
useNumMap.put(i, "");
if (realCal(num - 1)) {
return true;
} else {
resArray[num] = 0;
useNumMap.remove(i);
}
}
}
return false;
}
public static void main(String[] args) {
new PrimeNumberRing().getResult();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: