作者Abigail,把一个整数表示成由"1"构成的字符串,所有1之和等于证书本身,查看这个整数是不是2"11"、3"111"、4"1111"......的倍数,判断是否是质数。
JavaScript 代码如下:
var isPrime = (n)=>{
return !/^1?$|^(11+?)\1+$/.test(new Array(n + 1).join("1"));
};
我们知道,如果一个数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
}
};
因数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;
}
};
数值转换成二、八、十、十六进制,返回的类型都是字符串,因为数值可以直接运算,不需要转换成都是数值的其他进制。
字符串转化成数值,都需要指明字符串表示的数值是什么进制的。