Prime Numbers JavaScript

Hat*_*kNZ 11 javascript numbers

有人可以给我指导获得这里的黄金数字吗?这是家庭作业,所以我不想要答案,但一些指针将不胜感激.这真让我讨厌:(

我想我很亲密.但是我遇到的这个问题是25号和35号.这些不是素数,但是这个函数正在返回它们

var getPrimeNumber = function(n) {
    if(n === 1) return "";
    else if(n == 2) return 2;
    else if(n == 3) return 3;
    else { 
        for(i=Math.floor(Math.sqrt(n)); i>=2; i--){
            //console.log(i);//maybe another var in here? 
            if(n%i !==0 && n%2 !==0 && n%3 !== 0)
                return n; // 25/Math.sqrt(25) will be equal to zero this is what gives me 25 !!!   
        } 
    }
};
Run Code Online (Sandbox Code Playgroud)

Koo*_*Inc 17

基于此页面,这将是一种确定数字是否为素数的方法:

function isPrime(number) {
    let start = 2;
    const limit = Math.sqrt(number);
    while (start <= limit) {
        if (number % start++ < 1) return false;
    }
    return number > 1;
}
Run Code Online (Sandbox Code Playgroud)

node.js确定2到100.000之间的素数时需要大约250M.

也可以看看 ...

  • @kooilnc你可以通过检查一个数字在start中是否可以被2整除来调整性能,返回false.这样后来你需要将`start`(除数)增加为`start + = 2`来跳过所有偶数. (2认同)

vit*_*y-t 6

这是基于之前的素数值计算JavaScript中素数的最快方法.

function nextPrime(value) {
    if (value > 2) {
        var i, q;
        do {
            i = 3;
            value += 2;
            q = Math.floor(Math.sqrt(value));
            while (i <= q && value % i) {
                i += 2;
            }
        } while (i <= q);
        return value;
    }
    return value === 2 ? 3 : 2;
}
Run Code Online (Sandbox Code Playgroud)

测试

var value, result = [];
for (var i = 0; i < 10; i++) {
    value = nextPrime(value);
    result.push(value);
}
console.log("Primes:", result);
Run Code Online (Sandbox Code Playgroud)

产量

Primes: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
Run Code Online (Sandbox Code Playgroud)

它非常快,因为:

  • 它将循环限制与整数对齐;
  • 它使用较短的迭代循环,跳过偶数.

它可以在大约130ms内为您提供前100,000个素数,或者在大约4秒内为您提供前1个素数.

    function nextPrime(value) {
        if (value > 2) {
            var i, q;
            do {
                i = 3;
                value += 2;
                q = Math.floor(Math.sqrt(value));
                while (i <= q && value % i) {
                    i += 2;
                }
            } while (i <= q);
            return value;
        }
        return value === 2 ? 3 : 2;
    }

    var value, result = [];
    for (var i = 0; i < 10; i++) {
        value = nextPrime(value);
        result.push(value);
    }

    display("Primes: " + result.join(', '));

    function display(msg) {
        document.body.insertAdjacentHTML(
            "beforeend",
            "<p>" + msg + "</p>"
        );
    }
Run Code Online (Sandbox Code Playgroud)

  • @Flame_Phoenix如果你运行测试,你会发现它完美无缺.方法`nextPrime`希望你传递一个素数,这就是它如何优化下一个素数的计算.8不是素数,你不应该把它传入.Quote:>这是基于之前的素数值计算JavaScript中素数的最快方法. (2认同)

fat*_*ihk -1

您应该返回一个bool值,新函数可以是:

function(n) {
    if(n === 1) { return false;}
    else if(n == 2) { return true;}
    else if(n == 3) { return true;}
    else { 
        for(i=Math.floor(Math.sqrt(n));i>=2;i--){
            //console.log(i);//maybe another var in here? 
                if(n%i ==0 || n%2 ==0 || n%3 == 0) {return false;} 
        } 
        }
    return true;
};
Run Code Online (Sandbox Code Playgroud)

在OP中,控制if(n%i !==0 && n%2 !==0 && n%3 !== 0) {return n;}是有问题的,因为即使只有singlei满足这个条件,函数也会将数字返回为素数。