算法练习--素数环

输入一个数字n,输出[1,N]内的所有组合,满足a[i]+a[i+1]为素数,其中i∈[0,i-1]

例如输入:6

输出:1,4,3,2,5,6


实现:



var MAX = 10;

setup prime array
var primeArr = new Array();

var Ann = function a(arr){
if(arr.length <= 1){return arr;}

var rr = new Array();
for(var i = 0; i<arr.length;i++){

//get a copy
var ar = new Array();
for(var j = 0; j < arr.length;j++){ar[j] = arr[j];}

var current = ar[i];
ar.splice(i,1);


var childRet = a(ar);


for(var k = 0 ;k < childRet.length;k++){

var str = (current + "," + childRet[k]);
if(str.length < 2 || isPrimeCycle(str)){
rr.push(str);
}

}

}


return rr;
}

setup prime array
for(var i = 1;i <= MAX; i++){
for(var j = 1;j <= MAX; j++){
if(i!=j && isPrime(i+j)){primeArr[i+j] = 1;}
}
}

init input array
var a = new Array();
for(var i = 0;i < MAX; i++){
a.push(i+1);
}

run
var ret = Ann(a);

print result
for(var i = 0;i < ret.length;i++){
outRet(ret[i]);
}

var count = 0;
function outRet(r) {
count = count + 1;
console.log("==============" + "," + count.toString());
console.log(r);
}


function isPrimeCycle(str){
var arr = str.split(',');
for(var i = 0;i < arr.length-1; i++){

if(primeArr[parseInt(arr[i])+parseInt(arr[i+1])] != 1){return false;}

}

return true;
}

function isPrime(n){
for(var i = 2; i < n; i++){if(n%i == 0){return false;}}
return true;
}




根据引用\[1\]和引用\[2\]的代码,这是一个解决"素数"问题的算法。该问题要求找到一个由1到n这些组成的,使得相邻两个之和都是素数算法使用了深度优先搜索的思想,先选定一个,然后递归地选择下一个,直到找到一个满足条件的。在递归过程中,使用了一个组来记录已经选择的,以及一个布尔组来标记是否已经访问过某个。同时,还使用了一个来判断一个是否是素数。 根据引用\[3\]的输出示例,当n=4时,可能的素数有8个,分别是: 1: 1 2 3 4 2: 1 4 3 2 3: 2 1 4 3 4: 2 3 4 1 5: 3 2 1 4 6: 3 4 1 2 7: 4 1 2 3 8: 4 3 2 1 因此,对于问题"1358 - 素数",当n=4时,总共有8个满足条件的素数。 #### 引用[.reference_title] - *1* [【DFS练习素数](https://blog.csdn.net/z135733/article/details/122742948)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [1358 - 【提高】素数](https://blog.csdn.net/PanDaoxi2020/article/details/126597717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值