输入一个数字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;
}
分享到:
相关推荐
标题中的“素数环 回溯法-c语言”指出我们将探讨一个使用C语言实现的算法,该算法涉及素数和回溯法。素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。回溯法是一种试探性的解决问题的方法,当遇到...
【标题】"求解素数环问题"涉及的是一个与数学和算法紧密相关的主题,它在数据结构和编程中有着实际的应用。素数环问题,简单来说,是寻找一种特殊的环形序列,其中每个元素都是素数,并且可以通过某种运算(如加法或...
在编程领域,构建素数环是一项有趣的挑战,它涉及到数论和数据结构的知识。本文将深入探讨如何利用十字链表的遍历来实现这个任务。首先,让我们了解什么是素数、十字链表以及如何将两者结合。 素数是大于1且仅能被1...
在编程领域,素数是指大于1且只有两个正因数(1和自身)的大于1的自然数。在Java编程中,寻找1到100之间的所有素数是...通过这样的练习,程序员可以提升逻辑思维能力和问题解决能力,这也是编程学习过程中的重要一环。
本压缩包提供了几个基于DFS的C++编程练习题,让我们逐一解析这些题目并探讨其背后的DFS应用。 1. **《过河卒》**:这通常是一个棋盘问题,可能涉及到如何通过移动棋子(如卒)从棋盘的一端到达另一端,其中可能存在...
数据结构和算法是计算机科学的基础,对于理解和解决复杂问题至关重要。C语言因其高效性和灵活性,常被用于实现...通过不断练习和理解这些算法,开发者能够提升解决问题的能力,特别是在处理复杂数据和优化性能方面。
- 素数判断:埃拉托斯特尼筛法,快速判断一个数是否为素数。 - 中国剩余定理:解决复杂数论问题,如加密解密。 3. 几何: - 线段树:处理区间查询与修改,可以扩展到二维平面几何问题。 - 旋转卡壳法:解决二维...
#### 第六章:经典的习题作为复习算法时自我检测的参考练习 本章收集了一系列经典的习题,这些题目可以帮助参赛者巩固所学知识,并对自己的理解程度进行评估。 #### 第七章:附录 这一部分包含了一些补充材料,如...
- **Pollard's rho算法**:一种更快的质因数分解方法,利用随机函数和Floyd's cycle-finding algorithm( Floyd的环检测算法)来寻找质因数。 - **Miller-Rabin素性测试**:一种概率测试,用于判断一个大整数是否...
- **注意事项**: 掌握素数检测、进制转换和模运算等基础知识。 **3. 计算方法** - **定义**: 包括数值计算的方法。 - **应用场景**: 求解复杂函数或方程。 - **示例题目**: POJ 3273, POJ 3258, POJ 1905, POJ ...
在编程领域,算法是解决问题的关键,特别是在C和C++这样的低级语言中,熟练掌握算法能够极大地提升程序的效率和质量。...在学习和实践中,应不断练习和优化这些算法,以提高编程效率和解决问题的能力。
Kruskal算法依赖于并查集(如`find`函数)来检测是否形成环。 以上内容仅仅是C语言算法和数据结构的冰山一角。学习这些基础知识后,你可以进一步研究其他主题,如排序算法(快速排序、归并排序等),搜索算法(深度...
每一个都有代码和注释,分析,很好的算法练习 实验一:递归与分治 1. 二分查找 2. 合并排序 3. 快速排序 实验二:回溯 1. 0-1背包问题 2. 装载问题 3. 堡垒问题(ZOJ1002) 4. *翻硬币问题 5. 8皇后问题 6. 素数环...
- **SPFA算法**(Shortest Path Faster Algorithm):适用于有负权边但无负权环的图。 - **Floyd算法**:适用于所有类型的图,可以求解任意两点之间的最短路径。 - **差分约束系统**:一种特殊的最短路径问题,可...
- **Kruskal算法**:适用于稀疏图,需要并查集的支持来检测环,时间复杂度为\(O(E\log E)\)或\(O(E\log V)\)。 ##### 3. 大数运算 - 高精度加减乘除:由于整数溢出问题,在某些情况下需要自行实现高精度运算。 ###...
接下来是第二阶段,需要练习更复杂但常用的一些算法: 1. **二分图匹配**:匈牙利算法可以解决二分图的最大匹配问题,最小路径覆盖问题也是这一类问题的延伸。 2. **网络流**: - **最小费用流**:在网络流的基础...
掌握这些算法是参加NOIP复赛的基础,同时需要不断练习和应用,以提升解决问题的能力。在学习过程中,理论理解与实践结合是关键,同时要注重算法的时间和空间复杂度分析,以便在实际比赛中能有效地解决问题。
- **素数筛法**:快速判断一个数是否为素数的有效方法,常用于大范围内的素数筛选。 - **分解素因数**:将一个合数表示为其素因子的乘积形式,用于解决一些数论问题。 - **二分求幂**:利用二分法高效计算幂运算,...