编程解决素数环问题Java_回溯法解决素数环问题java实现

使用Java实现回溯法解决素数环问题,输入正整数n,构造环形序列使得相邻两个整数之和为素数。文章提供了一个递归函数示例,从1开始尝试构建解决方案,并检查每一步是否满足素数条件。
摘要由CSDN通过智能技术生成

素数环问题:

输入正整数n,把整数1,2,3……,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16

样例输入:

6

样例输出:

1 4 3 2 5 6

1 6 5 2 3 4

回溯法解决素数环问题是比较简单的,我设计了一个递归函数,函数的功能是: 在不停的尝试结果数列中的下一个,假如尝试到最后一个还可以放置数字的话,就得到一种解决方案并输出,直到求出所有的解决方案,因为题目要求输出时候从整数1开始,所以我直接设置第一个为1,从第二个开始尝试。

代码如下 :

import java.util.*;

public class HuiSuPrimeLoop {

static int[] visit = null;

static int[] result = null;

static int n =0;

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

n = sc.nextInt();

visit = new int[n+1];

result = new int[n];

handle(0);

}

private static boolean isPrime(int num){

if (num == 2 || num == 3) {

return true;

}

if (num%6 !=1 && num%6 != 5) {

return false;

}

for (int i = 5; i*i <= num; i=i+6) {

if (num%i==0 || num%(i+2)==0) {

return false;

}

}

return true;

}

public static void handle(int i){

for(int j=1;j<=n;j++){

if(i!=0){ // 因为要形成一个闭环,所以1和其他元素不同,因为1一开始的时候没有前一项

if(i==n-1){ //最后一项要注意需要和第一项相加之后的数字是质数

if(visit[j]==0&&isPrime(j+result[0])&&isPrime(result[i-1]+j)){

result[i] = j;

visit[j] = -1;

for(int k=0;k

结果如下 :

6b7144ff054c1119e7b6a7176196373b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值