代码之家  ›  专栏  ›  技术社区  ›  Milad

JavaScript中的素数

  •  0
  • Milad  · 技术社区  · 7 年前

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

    我已经创建了一个数组( 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 回复  |  直到 7 年前
        1
  •  1
  •   slevy1    7 年前

    OP提出的算法可能有问题,即使它在2到10的有限数字范围内工作,以产生预期的结果 2,3,5,7 非素数可以悄悄进入,如下所示:

    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();
    <div id="demo"></div>

    下面的代码可能效率较低,但好处是,无论数字范围有多大,它都可以工作。该解决方案源于从中借用和修改的代码 here here

    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();
    <div id=“演示”></div>

    有趣的相关讨论 here .

        2
  •  0
  •   Won    5 年前

    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)}`))
        3
  •  0
  •   ahadjizin    4 年前
    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);