【java】素数环

来源:互联网 发布:大数据的技术人员要求 编辑:程序博客网 时间:2024/06/06 13:58

输入正整数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();}}


0 0