输入正整数n,把整数1,2,3,...,n组成一个环,使得相邻两个整数之和均为素数,输出从整数1开始逆时针排列。同一个环应该只输出一次。n<=16.
样例输入:
6
样例输出:
1 4 3 2 5 6
1 6 5 2 3 4
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void search(int[] res,int[]visited,int n,int cursor){
if(cursor==n&&isPrime(res[0]+res[n-1])){
StringBuffer str=new StringBuffer();
for(int i:res){
str.append(i+" ");
}
System.out.println(str.substring(0,str.length()-1));
return;
}
for(int i=2;i<=n;i++){
if(visited[i-1]==0){
if(cursor>0){
if(!isPrime(i+res[cursor-1]))
continue;
}
res[cursor]=i;
visited[i-1]=1;
search(res,visited,n,cursor+1);
visited[i-1]=0;
}
}
}
public static boolean isPrime(int n){
if(n==1)
return false;
boolean flag=true;
for(int i=2;i<=Math.sqrt(n);i++){
if(n%i==0){
flag=false;
break;
}
}
return flag;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
int n=scanner.nextInt();
int[] res=new int[n];
int[] visited=new int[n];
res[0]=1;
Arrays.fill(visited,0);
search(res,visited,n,1);
}
scanner.close();
}
}