找到第n个主要的javascript

时间:2015-03-17 04:46:49

标签: javascript

下面的函数应该吐出第n个素数。然而,它继续吐出3.有人可以帮忙吗?干杯,安东尼

function Prime(num) {
output = true  
    for (i=2 ; i<num ; i++) {
        if (num%i === 0)  {
           output = false ; break
        }
    }
return output
}

function PrimeMover(num) {
var count = 0
    for (i=2 ; i<10000 ; i++)  {
        if (Prime(i) === true) {
            count = count + 1 
        }
        if (count === num) {
            return i
            break
        } 
    }
}

6 个答案:

答案 0 :(得分:2)

您已在i中创建了循环计数器global scope。因此PrimeMoverPrime都会改变相同的全局i。在每次迭代中,PrimeMover都会分配{{} 1}}。之后i=2分配Primei=2变量的值将在i2之间更改。使用本地循环计数器变量{{1 }}

3

答案 1 :(得分:1)

function main(inp) {
  var count = 0;
  for (var i = 2; i <= 100000; i++) {
   if (isPrime(i)) count = count + 1;
   if (count == inp) return i;
 }
}
function isPrime(i) {
 for (var j = 2; j < i; j++) {
  //instead of `j < i` it can be reduced using other conditions 
  if (i % j == 0) {
   return false
  }
 }
 return true
}
main(5) // any number

答案 2 :(得分:0)

这可能会更加优化

function nthPrime(n) {
    var P = 0;

    function isPrime(x) {
        var isPrime= true;

        for (var d = 2; d <= Math.sqrt(x); d++) {
            if((x/d) % 1 == 0) {
                isPrime = false;
                break;
            }
        }

        return isPrime;
    }

    for (var i = 1; 0 < n; i++) {

        if(isPrime(i)) {
            P = i; n--;
        }

        // we can skip the even numbers
        if(3 <= i){
            i++;
        }

    }

    return P;
}

答案 3 :(得分:0)

对于最不喜欢代码的人,

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

答案 4 :(得分:0)

试试这个

var pos=10001;
console.log(primeNumforPos(pos));

function primeNumforPos(pos){
  var num=2,curPos=0;
  while(curPos<=pos){
    if(isPrime(num)){
      curPos++;
    }
    if(curPos==pos){
      return num;
    }else{
      num++;
    }
  }
}

function isPrime(num){
  for(var i=2;i<=Math.sqrt(num);i++){
    if(num%i==0){
      return false;
    }
  }
  return true;
}

答案 5 :(得分:-1)

const findPrime = num => {
let i, primes = [2, 3], n = 5
const isPrime = n => {
    let i = 1, p = primes[i],
        limit = Math.ceil(Math.sqrt(n))
    while (p <= limit) {
        if (n % p === 0) {
            return false
        }
        i += 1
        p = primes[i]
    }
    return true
}
for (i = 2; i <= num; i += 1) {
    while (!isPrime(n)) {
        n += 2
    }
    primes.push(n)
    n += 2
};
return primes[num - 1]

} console.time('时间')

让 x = findPrime(9999)

console.timeEnd('时间')

控制台.log(x)