题目:
将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。要求输出素数环。
输入
6
输出
143256
165234
源代码:
public class SuShuHuan {
static int N;
//判断是否为素数
public boolean is_ss(int a,int b)
{
int c=a+b;
if(c==1)
return false;
for(int i=2;i*i<=c;i++)
{
if(c%i==0) //不是素数
return false;
}
return true;
}
public void hs(int a[],int gs)
{
if(gs==N) //深搜了N次
{
if(is_ss(a[0],a[N-1])) //最后一个数与第一个数相加为素数
for(int i=0;i<N;i++)
System.out.print(a[i]); //输出
System.out.println();
return;
}
int tmp;
for(int i=gs;i<N;i++) //为防止重复,从后一个数开始
{
tmp=a[i];a[i]=a[gs];a[gs]=tmp; //深搜交换两数
if(is_ss(a[gs],a[gs-1])) //如果相加为素数
{
hs(a,gs+1); //深搜
}
tmp=a[i];a[i]=a[gs];a[gs]=tmp; //回溯
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner cin=new Scanner(System.in);
N=cin.nextInt();
int[] a=new int[N];
for(int i=0;i<N;i++)
a[i]=i+1; //将N个数放入数组中
SuShuHuan ssh=new SuShuHuan();
ssh.hs(a,1); //从a[1]开始
}
}