特殊质数js实现

来源:互联网 发布:php网页编辑软件有哪些 编辑:程序博客网 时间:2024/05/01 11:01

首先我们看一下原题

7331是一个特殊的质数,因为我们去掉个位得到的733是一个质数;再次去掉个位得到的73又是一个质数;再去掉个位后得到的7依然是一个质数。对于形似这种的质数,我们称呼它为特殊质数。写一个程序对给定的待求特殊质数的位数 N (1≤N≤8)求出所有对应位数的特殊质数(注意:数字1不被看作一个质数)。输入包括一个整数,为待求特殊质数的位数 N。输出长度为N的特殊质数列表,每行一个。

看到这道题我们首先分析一下什么是质素。质数就是只能被一和自身整除的数,题目要求去掉各位之后仍然是是质数,所以最高位必须是质数,所以我们定义一个最高位满足条件的质数数组 var tiptop=[2,3,5,7];除了最高位后面的数那肯定是以奇数结尾的,但是以5结尾的数是能被5整除的,所以定义后面位数出现的数的数组为 var afterNum=[1,3,7,9] 。

首先我们写一个方法判断这个数是否是质数。代码如下

/** * 判断数是否是质素 * @param data 输入的数 * @returns {boolean} 输出是否是质素 */function judgeZhiSu(data) {    if (typeof data != 'number') {        console.log("判断的对象不是数字");        return false;    }    if (data <= 0) {        console.log("请输入大于0的正数");        return false;    }    if (data == 1) {        return false;    }    if (!(/^[0-9]*[1-9][0-9]*$/.test(data.toString()))) {        console.log('请输入整数');        return false;    }    var len = Math.floor(data / 2);    for (var i = 2; i <= len; i++) {        if (data % i == 0) {            return false;        }    }    return true;}

接着我们就要开始计算数据是否满足题目的条件,其中我们会在方法的内部定义一个递归方法

/** * 输入位数,输出满足条件的所有特殊质素 * @param len 位数长度 1<=len<=8 */function computeMain(len) {    if (typeof len != 'number') {        console.log("判断的对象不是数字a");        return;    }    if (len < 1 || len > 8) {        console.log("请输入大于等于1小于等于8的整数");        return;    }    if (!(/^[0-9]*[1-9][0-9]*$/.test(len.toString()))) {        console.log('请输入整数');        return;    }    var dataArr = [];    var tiptop = [2, 3, 5, 7];    var afterNum = [1, 3, 7, 9];    for (var i = 0, arrLen = tiptop.length; i < arrLen; i++) {        recurrence(tiptop[i],1);    }    /**     * 递归计算     * @param num 前几位满足条件的数据     * @param leve 已经多少位了     */    function recurrence(num, leve) {        if(leve==len){            dataArr.push(num);            return;        }        for(var i= 0,aLen=afterNum.length;i<aLen;i++){           if(judgeZhiSu((num+''+afterNum[i])*1)){               recurrence((num+''+afterNum[i])*1,leve+1)           }        }    }    return dataArr;}


0 0
原创粉丝点击