JavaScript中的素数

时间:2017-10-02 23:41:36

标签: javascript primes

我用JavaScript编写代码来查找Prime数字。

我创建了一个数组(var arr)并将第一个素数放入其中。

我想检查存储在数组中的最后一个素数的i值(而不是所有数字,以便更快地运行。)

检查我的代码,请更正我的语法。

var arr = [2];
document.getElementById("demo").innerHTML = arr;

function myFunction() {

for (i = 3; i <= 10; i++) {
    if (i % 2 !==0) {
        for (j = 0; j <= arr.length - 1; j++){
            if (i % arr[j] !== 0) {
                arr.push(i);
            }
        }
        document.getElementById("demo").innerHTML = arr;    
    }
}

3 个答案:

答案 0 :(得分:1)

OP提出的算法可能存在问题,即使它在2到10的有限范围内工作,以在纠正代码后产生2,3,5,7的预期结果。不幸的是,如果数字范围扩大,那么 非素数可以进入,如下所示:

&#13;
&#13;
var arr = [2];

function myFunction() {

    for (i = 3; i <= 30; i++) {
        if (i % 2 !==0 && i % Math.sqrt(i) !==0) {
            for (j = 0; j <= arr.length - 1; j++){
                if (i % arr[j] !== 0) {
                    arr.push(i);
                }
                break;
            }
        }
    }
    document.getElementById("demo").innerHTML = arr;
}  
myFunction();
&#13;
<div id="demo"></div>
&#13;
&#13;
&#13;

以下代码可能效率较低,但无论数字范围有多大,它的优点都在于它的效果。该解决方案源自从herehere借用和修改的代码。

&#13;
&#13;
var arr = [2];

function isPrime( n ) {

    
   // eliminate non-integers 
   if (  n != Math.round(n)  ) {
      return false;
   }
   
   // assume n is prime and test if true
   for(var i=2, max=Math.sqrt(n); i <= max; i++) {
       if ( n % i === 0 ) {
           return false;
       }
    }
    return n > 1;
}

function myFunction() {

    for (i = 3; i <= 30; i++) {
      if ( isPrime(i) ) {
          arr.push(i); 
      }// end-if
    }// end-for
    document.getElementById("demo").innerHTML = arr;
}

myFunction();
&#13;
<div id="demo"></div>
&#13;
&#13;
&#13;

注意,数组最初以素数2开始,当代码遇到指定范围内的素数时,它们将被添加到数组中。顺便说一下,你需要一个ID为&#34; demo&#34;的HTML DIV标签。为此工作。并且,在循环完成处理之后,您只需要将数组分配给div元素的innerHTML属性一次。最后,您需要调用myFunction()。

有趣的相关讨论here

答案 1 :(得分:0)

对于最不喜欢代码的人,

function primes(limit)
{
  var prime=[], i=1
  while (++i < limit+1) prime.reduce((a,c)=>(i%c)*a,1) && prime.push(i)
  prime.unshift(1)
  return prime
}
[1,2,3,5,10,100].forEach(n=>console.log(`primes(${n})=${primes(n)}`))

答案 2 :(得分:0)

function primeNumbers(num){
  let primeNum=[2];
  
  for (let i=3;i<=num;i++){
    let notPrime=[];
    for (let j=2;j<i;j++){
      if (i%j===0){
        notPrime.push(i);
      }
      if (notPrime.length===0){
        primeNum.push(i);
      }
    }
  }
  return primeNum;
}
primeNumbers(10);