js练习11~20

11.声明函数factorial(n),参数n为自然数,函数返回n的阶乘。注意0!=1。注意不要在控制台输出任何内容。
function factorial(n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

12.声明函数prime(n),参数n为自然数,当n为素数时,函数返回true,否则返回false。
注意不要在控制台输出任何内容。
function prime(n) {
    let count = 0;
    for (let i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return true;
    } else {
        return false;
    }
}

13.声明函数f(n),参数n为自然数,函数返回n以内的素数个数。
注意不要在控制台输出任何内容。
function prime(n) {
    let count = 0;
    for (let i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return true;
    } else {
        return false;
    }
}
function f(n) {
    var count = 0;
    for (let i = n - 1; i > 0; i--) {
        if (prime(i)) {
            count++;
        }
    }
    return count;
}

14.如果n和n+2都是素数,则称n和n+2是一对姐妹素数。
声明函数f(n),参数n为自然数,函数返回n以内的姐妹素数的对数。
注意不要在控制台输出任何内容。
function f(n) {
    var i, j, k, sum = 0, flag1, flag2;
    for (i = 3; i <= n; i++) {
        flag1 = 1, flag2 = 1;
        for (j = 2; j < i; j++) {
            if (i % j == 0) {
                flag1 = 0;
                break;
            }
            for (k = 2; k < i + 2; k++) {
                if ((i + 2) % k == 0) {
                    flag2 = 0;
                    break;
                }
            }
        }
        if (flag1 == 1 && flag2 == 1) {
            sum++;
        }
    }
    return sum;
}

15.如果一个素数依次去掉其最低位数字后,所得均为素数,则该数是超级素数。
注意超级素数不能是个位数。
声明函数f(n),参数n为自然数,如果n是超级素数,则函数返回true,否则返回false。
例如:233都是超级素数,7、137、307都不是是超级素数
注意不要在控制台输出任何内容。
//判断质数
function prime(n) {
    let count = 0;
    for (let i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return true;
    } else {
        return false;
    }
}

function maxPrime(n) {
    if (prime(n) && n > 9) {
        while (n) {
            n = Math.floor(n / 10);
            if (!prime(n) && n > 0) {
                return false;
            }
        }
        return true;
    } else {
        return false;
    }
}

16.如果一个素数依次去掉其最低位数字后,所得均为素数,则该数是超级素数。
注意超级素数不能是个位数。
声明函数f(n),参数n为自然数,函数返回n以内的超级素数的个数。
例如:20以内的超级素数的个数为0,100以内的超级素数的个数为9。
注意不要在控制台输出任何内容。
//判断质数
function prime(n) {
    let count = 0;
    for (let i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return true;
    } else {
        return false;
    }
}
//console.log(prime(n));
function maxPrime(n) {
    if (prime(n) && n > 9) {
        while (n) {
            n = Math.floor(n / 10);
            if (!prime(n) && n > 0) {
                return false;
            }
        }
        return true;
    } else {
        return false;
    }
}
function f(n) {
    let count = 0;
    for (var i = n; i > 0; i--) {
        if (maxPrime(i)) {
            count++;
        }
    }
    return count;
}

17.超级素数的另一种概念:
如果一个素数依次去掉其最高位数字后,所得均为素数,则该数是超级素数。
注意超级素数不能是个位数;超级素数不能包含数字0。
声明函数f(n),参数n为自然数,如果n是超级素数,则函数返回true,否则返回false。
例如:223是超级素数,3、11、103都不是超级素数。
注意不要在控制台输出任何内容。
//检测质数
function prime(n) {
    let count = 0;
    for (let i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return true;
    } else {
        return false;
    }
}
function f(n) {
    let len = n.toString().length;

    let number = Math.pow(10, len - 1);

    if (!prime(n) || len <= 1) {
        return false;
    }
    //判断个位是否是素数
    if (!prime(n % 10)) {
        return false
    }
    //检测是否包含数字0
    while (n) {
        if ((n % 10) == 0) {
            return false;
        }
        n = Math.floor(n / 10);
    }
    //判断是否是超级素数
    while (n) {
        n = ((n / number) - Math.floor(n / number)) * number;
        if (!prime(n)) {
            return false;
        }
        number = Math.floor(number / 10);
    }
    return true;
}

18.超级素数的另一种概念:
如果一个素数依次去掉其最高位数字后,所得均为素数,则该数是超级素数。
注意超级素数不能是个位数;超级素数不能包含数字0。
声明函数f(n),参数n为自然数,函数返回n以内的超级素数的个数。
例如:100以内的超级素数的个数是11。
注意不要在控制台输出任何内容。
//检测质数
function prime(n) {
    let count = 0;
    for (let i = 1; i <= n; i++) {
        if (n % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return true;
    } else {
        return false;
    }
}
function maxPrime(n) {
    let len = n.toString().length;

    let number = Math.pow(10, len - 1);

    if (!prime(n) || len <= 1) {
        return false;
    }
    //判断个位是否是素数
    if (!prime(n % 10)) {
        return false
    }
    //检测是否包含数字0
    while (n) {
        if ((n % 10) == 0) {
            return false;
        }
        n = Math.floor(n / 10);
    }
    //判断是否是超级素数
    while (n) {
        n = ((n / number) - Math.floor(n / number)) * number;
        if (!prime(n)) {
            return false;
        }
        number = Math.floor(number / 10);
    }
    return true;
}
function f(n) {
    let count = 0;
    for (let i = n - 1; i > 0; i--) {
        if (maxPrime(i)) {
            count++;
        }
    }
    return count;
}

19.汉诺塔问题:n个金盘按由大到小的顺序叠放在1号塔台上,现要将其移动到3号塔台上,每次只能移动一个金盘,可以借助2号塔台,每个塔台都必须保持由大到小的叠放次序。
声明函数f(n,m),n为金盘数,m为最少移动步数方案中的第m步,返回第m步从哪个塔台取金盘。
例如:3个金盘,第6步从2号塔台取金盘。
注意不要在控制台输出任何内容。
var num = 0, sum, result = 1;
function move(n, from, buffer, to) {
    if (n == 1) {
        num++;
        if (sum == num) {
            result = from;
            return result;
        }
    }
    else {
        move(n - 1, from, to, buffer);
        num++;
        if (sum == num) {
            result = from;
            return result;
        }
        move(n - 1, buffer, from, to);
    }
}

function f(n, m) {
    sum = m;
    move(n, 1, 2, 3);
    return result;
}

20.声明函数f(a,b),如果b是数组a的元素,则返回第一个b的下标,否则返回-1。
注意不要在控制台输出任何内容。
function f(a, b) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] == b) {
            break;
        }
    }
    if (a[i] == b) {
        return i;
    } else {
        return -1;
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值