`
mybwu_com
  • 浏览: 194104 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

算法练习--素数环

 
阅读更多

输入一个数字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语言”指出我们将探讨一个使用C语言实现的算法,该算法涉及素数和回溯法。素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。回溯法是一种试探性的解决问题的方法,当遇到...

    求解素数环问题

    【标题】"求解素数环问题"涉及的是一个与数学和算法紧密相关的主题,它在数据结构和编程中有着实际的应用。素数环问题,简单来说,是寻找一种特殊的环形序列,其中每个元素都是素数,并且可以通过某种运算(如加法或...

    素数环的构建

    在编程领域,构建素数环是一项有趣的挑战,它涉及到数论和数据结构的知识。本文将深入探讨如何利用十字链表的遍历来实现这个任务。首先,让我们了解什么是素数、十字链表以及如何将两者结合。 素数是大于1且仅能被1...

    java代码-1-100的素数

    在编程领域,素数是指大于1且只有两个正因数(1和自身)的大于1的自然数。在Java编程中,寻找1到100之间的所有素数是...通过这样的练习,程序员可以提升逻辑思维能力和问题解决能力,这也是编程学习过程中的重要一环。

    递归回溯深度优先搜索DFS练习题(含C++源码)

    本压缩包提供了几个基于DFS的C++编程练习题,让我们逐一解析这些题目并探讨其背后的DFS应用。 1. **《过河卒》**:这通常是一个棋盘问题,可能涉及到如何通过移动棋子(如卒)从棋盘的一端到达另一端,其中可能存在...

    数据结构算法集锦(c语言版)

    数据结构和算法是计算机科学的基础,对于理解和解决复杂问题至关重要。C语言因其高效性和灵活性,常被用于实现...通过不断练习和理解这些算法,开发者能够提升解决问题的能力,特别是在处理复杂数据和优化性能方面。

    ACM 算法 常用模板

    - 素数判断:埃拉托斯特尼筛法,快速判断一个数是否为素数。 - 中国剩余定理:解决复杂数论问题,如加密解密。 3. 几何: - 线段树:处理区间查询与修改,可以扩展到二维平面几何问题。 - 旋转卡壳法:解决二维...

    NOIP考察的算法与数据结构的知识

    #### 第六章:经典的习题作为复习算法时自我检测的参考练习 本章收集了一系列经典的习题,这些题目可以帮助参赛者巩固所学知识,并对自己的理解程度进行评估。 #### 第七章:附录 这一部分包含了一些补充材料,如...

    蓝桥杯c++-蓝桥杯竞赛练习之算法提高题质因数.zip

    - **Pollard's rho算法**:一种更快的质因数分解方法,利用随机函数和Floyd's cycle-finding algorithm( Floyd的环检测算法)来寻找质因数。 - **Miller-Rabin素性测试**:一种概率测试,用于判断一个大整数是否...

    算法训练方案详解

    - **注意事项**: 掌握素数检测、进制转换和模运算等基础知识。 **3. 计算方法** - **定义**: 包括数值计算的方法。 - **应用场景**: 求解复杂函数或方程。 - **示例题目**: POJ 3273, POJ 3258, POJ 1905, POJ ...

    C常用算法反反复反复

    在编程领域,算法是解决问题的关键,特别是在C和C++这样的低级语言中,熟练掌握算法能够极大地提升程序的效率和质量。...在学习和实践中,应不断练习和优化这些算法,以提高编程效率和解决问题的能力。

    c算法c算法,数据结构

    Kruskal算法依赖于并查集(如`find`函数)来检测是否形成环。 以上内容仅仅是C语言算法和数据结构的冰山一角。学习这些基础知识后,你可以进一步研究其他主题,如排序算法(快速排序、归并排序等),搜索算法(深度...

    算法设计与分析实验指导

    每一个都有代码和注释,分析,很好的算法练习 实验一:递归与分治 1. 二分查找 2. 合并排序 3. 快速排序 实验二:回溯 1. 0-1背包问题 2. 装载问题 3. 堡垒问题(ZOJ1002) 4. *翻硬币问题 5. 8皇后问题 6. 素数环...

    2、省选+NOI-第二部分 字符串_2020.09.04.pdf

    - **SPFA算法**(Shortest Path Faster Algorithm):适用于有负权边但无负权环的图。 - **Floyd算法**:适用于所有类型的图,可以求解任意两点之间的最短路径。 - **差分约束系统**:一种特殊的最短路径问题,可...

    学习算法之路

    - **Kruskal算法**:适用于稀疏图,需要并查集的支持来检测环,时间复杂度为\(O(E\log E)\)或\(O(E\log V)\)。 ##### 3. 大数运算 - 高精度加减乘除:由于整数溢出问题,在某些情况下需要自行实现高精度运算。 ###...

    常用算法 (2).docx

    接下来是第二阶段,需要练习更复杂但常用的一些算法: 1. **二分图匹配**:匈牙利算法可以解决二分图的最大匹配问题,最小路径覆盖问题也是这一类问题的延伸。 2. **网络流**: - **最小费用流**:在网络流的基础...

    NOIP复赛考纲知识点

    掌握这些算法是参加NOIP复赛的基础,同时需要不断练习和应用,以提升解决问题的能力。在学习过程中,理论理解与实践结合是关键,同时要注重算法的时间和空间复杂度分析,以便在实际比赛中能有效地解决问题。

    《2013年王道论坛计算机考研机试指南》

    - **素数筛法**:快速判断一个数是否为素数的有效方法,常用于大范围内的素数筛选。 - **分解素因数**:将一个合数表示为其素因子的乘积形式,用于解决一些数论问题。 - **二分求幂**:利用二分法高效计算幂运算,...

Global site tag (gtag.js) - Google Analytics