质数判断

正则表达式判断质数

作者Abigail,把一个整数表示成由"1"构成的字符串,所有1之和等于证书本身,查看这个整数是不是2"11"、3"111"、4"1111"......的倍数,判断是否是质数。

JavaScript 代码如下:

var isPrime = (n)=>{
    return !/^1?$|^(11+?)\1+$/.test(new Array(n + 1).join("1"));
};

2 的倍数改良版

我们知道,如果一个数number 能被2整除,就可以判断number 是合数,否则,检测约数3、5、7、9…… number的平方根。

var isPrime = (number)=>{
    if(number % 2 == 0){
        return false;
    }else{
        for(var divisor = 3; divisor * divisor <= number;divisor+=2){
            if(number % divisor == 0){
                return false;
            }
        }
        return true
    }
};

2和3 的倍数改良版

因数divisor从5开始,步长是6,divisor + 1,divisor + 3,divisor + 5 这些因数都是偶数,可以不用检测,divisor + 4 的通项可以表示成 5 + 4 + 6k = 9 + 6k,一定是3的倍数,所以只需要检测 divisor 和 divisor + 2 两个因数。

var isPrime = (number)=>{
    if(number <=3){
        return number > 1;
    }else if(number % 2 === 0 || number % 3 === 0){
        return false;
    }else{
        for(var divisor = 5;divisor * divisor <= number; divisor += 6){
            if(number % divisor === 0 || number % (divisor + 2) === 0){
                return false;
             }
         }
         return true;
    }
};

总结

数值转换成二、八、十、十六进制,返回的类型都是字符串,因为数值可以直接运算,不需要转换成都是数值的其他进制。

字符串转化成数值,都需要指明字符串表示的数值是什么进制的。