题目
输入正整数n,把整数1,2,3,…,n组成一个环,使得相邻两个整数之和为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n<<16.
样例输入:
6
样例输出:
1 4 3 2 5 6
1 6 5 2 3 4
static int n;
static int[] A;
static int[] vis;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
A=new int[n];
A[0]=1;
vis=new int[n+1];
dfs(1);
}
static void dfs(int cur){
if(cur==n&&isp(A[0],A[n-1])){
for(int i=0;i<n;i++){
System.out.print(A[i]);
}
System.out.println();
}
for(int i=2;i<=n;i++){
if(vis[i]==0&&isp(i,A[cur-1])){//如果i没用过,并和前一个数之和为素数
A[cur]=i; //如果i符合条件 则把i加入到数组中
vis[i]=1; //把i标记为已经用过 后面就不能再用了
dfs(cur+1);
vis[i]=0; //这里进行回溯
}
}
}
static boolean isp(int a,int b){ //判断是否为素数
int c=a+b;
for(int i=2;i<c;i++){
if(c%i==0)return false;
}
return true;
}
来源:CSDN
作者:007Peanut
链接:https://blog.csdn.net/qq_45287265/article/details/104582108