everycode
everycode copied to clipboard
2014年11月18日
创建一个函数isPrime判断传入的参数是否为素数(质数),返回true 或 false。
function isPrime(number){
}
//请做以下测试
isPrime(0)
// => false
isPrime(1)
// => false
isPrime(2)
// => true
isPrime(4)
// => false
isPrime(157)
//=> true
function isPrime(n) {
for (var i = 2; i <= n / 2; i++) {
if (n % i === 0)return false
}
return true;
}
function isPrime(number){
if(number<=2){
return false
}
for(var i=2;i<=parseInt(number/2);i++){
if(number%i === 0){
return false;
}
}
return true;
}
跟楼上的神似
修复0和1的BUG。
修复4的bug
function is_prime(n){
if(n<4){
return true;
}
for(var i=2;i<=Math.sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
function isPrime( n ) {
var sqrt_n = Math.sqrt( n );
var sqrt_n_half = sqrt_n >> 1;
if( n===1 || n % 2 === 0 ) {
return false;
}
for(var i = 1; i <= sqrt_n_half; i++ ) {
if( n % ((i << 1) + 1) === 0)
return false;
}
return true;
}
console.log(isPrime(157));//true
不是很健壮,可能有bug
function isPrime(number){
return new Array(Math.floor(Math.sqrt(number))).join("|").split("").reduce(function(idx) {
return (idx < 0) ? idx : (number % idx ? idx + 1 : -1);
}, 2) >= 0;
}
for(var i = 1; i < 20; i++) {
console.log(isPrime(i));
}
console.log(isPrime(157));
效率不高,只是写着看起来不一样而已。
全程没有 for 之类的 -。 -
function isPrime(number) {
return isNaN(number)?
(number.numa <== 1?
false:
(number.numb === 1?
true:
(number.numa % number.numb === 0?
false:
isPrime({"numb":number.numb - 1,"numa":number.numa})))):
isPrime({"numa":number,"numb":number - 1})
}
强行用递归,就是这么任性。没有用if和循环,没有考虑效率。
function isPrime(number){
return !/^1?$|^(11+?)\1+$/.test(new Array(number + 1).join('1'));
}
很久前看到的用正则判断的,脑洞大开。 Reference:http://montreal.pm.org/tech/neil_kandalgaonkar.shtml
@jsenjoy 这个赞
@jsenjoy 赞
function isPrime(num){
if(num==1){
return false;
}
if(num==2){
return true;
}
for(var i=2;i<num/2;i++){
if(num%i===0){
return false;
}
else{
return true;
}
}
}
console.log(isPrime(1));
console.log(isPrime(2));
console.log(isPrime(4));
console.log(isPrime(157));
@silencebean 你这个不对
@qingo 为什么
@silencebean 你测下,if return false 然后 else return true 这样 在循环第一次时肯定会return值 也就是当i===2时 就退出了
function isPrime(number){
if(number<2) return !1;
for(var i=Math.sqrt(number)|0;i>1;i--){
if(!(number%i)) return !1;
}
return !0;
}
不知是否有bug,效率也不高