特殊质数js实现

原创 2016年05月31日 10:09:31

首先我们看一下原题

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;
}


计蒜客 特殊质数

7331是一个特殊的质数,因为我们去掉个位得到的733是一个质数;再次去掉个位得到的73又是一个质数;再去掉个位后得到的7依然是一个质数。对于形似这种的质数,我们称呼它为特殊质数。写一个程序对给定的待...

高效质数判断算法及其JS实现

高效质数判断算法及其JS实现 高效质数判断算法及其JS实现 理论基础 质数的定义 质数与合数 最小质因子的取值范围 质数的分布 理论基础 1.质数的定义 大于1的正整数...

js 实现 特殊扩散效果

  • 2010年03月30日 14:50
  • 2KB
  • 下载

CODE[VS] 2080 特殊的质数肋骨

dfs+神奇的质数归纳

【枚举】洛谷 P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

题目描述农民约翰的母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成...

【USACO1.5.3】特殊的质数肋骨

题目略分析这是一个构造题 ,生成+测试应该能过,但是可以更好啊 因为要到达八位数,所以不适合用打表 ,直接判断也不多 而且。。 这种数很少,po大爷好像提过的。。 要注意第一个数特殊考虑代码#...

USACO 1.5 Superprime Rib 特殊的质数肋骨(模拟)

【USACO1.5.3】Superprime Rib 特殊的质数肋骨 Time Limit:10000MS  Memory Limit:65536K Total Submit:56 Accepte...

蓝桥杯 算法提高 特殊的质数肋骨

算法提高 特殊的质数肋骨 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述   农民约翰母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。...

Superprime Rib特殊的质数肋骨

Superprime Rib特殊的质数肋骨 农民约翰母牛总是产生最好的肋骨. 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为...

特殊的质数肋骨

算法提高 特殊的质数肋骨                                                                                      时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:特殊质数js实现
举报原因:
原因补充:

(最多只允许输入30个字)