实现一个函数,每次调用返回下一个质数。请问我写的哪里不对?

实现一个函数,每次调用返回下一个质数,要求不使用全局变量,且函数本身不接受任何参数
举例说明
getPrime() // 2

getPrime() // 3

getPrime() // 5

function getPrime(){
    var num = 0;
    var flag = true;
    while(flag) {
        (function(){
            for(var i=1; i<num; i++) {
                if(num%i === 0) {
                    
                } else {
                    return num;
                }
            }
            num = num + 1
        })()
    }
}

console.log(getPrime());
阅读 3.4k
4 个回答

ES6 Generator了解下

闭包记住上次查出的质数a, 这一次从a+1开始循环, 从而达到逐一输出的目的

  var num = (function () {
    var a = 0;
    return function () {
      for (var j = a + 1; j < 10000; j++) {
        var flag = true;
        for (var i = 2; i < j; i++) {
          if (j % i === 0) {
            flag = false;
          }
        }

        if (flag) {
          a = j;
          break;
        }
      }
      return a;
    }
  })();
function isPrime(number){
    var resultFlag= false;
    //质数判断逻辑
    //....
    return resultFlag;
}
function prepareGetPrime(maxNumber){
    var i=0;
    return function next(){
        var primeNumber = -1;
        for(var _tmp_ = i;_tmp_<=maxNumber;_tmp_++){
            if(isPrime(_tmp_)){
                primeNumber = _tmp_;
                break;
            }
        }
        if(_tmp_ < maxNumber){
            i = _tmp_+1;
        }
        return primeNumber;
    }
}
var getPrime = prepareGetPrime(1000);
getPrime();//
getPrime();//
function getPrime () {
    if (!getPrime.last) {
        getPrime.last = 1
        getPrime.primeList = []
    }
    getPrime.last++
    if (getPrime.primeList.some(num => getPrime.last % num == 0)) return getPrime()
    getPrime.primeList.push(getPrime.last)
    return getPrime.last
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题