Javascript获得第n个素数

时间:2016-10-14 12:10:36

标签: javascript

这应该返回第n个素数(n是用户给出的数字)。它适用于前几个数字(1返回2,2返回3,3返回5)但是当给出5时,它返回9不是素数(它应该是11)。这种情况发生在其他数字以上(当它应该是17时,7返回15)。

“文档”的内容与HTML有关,我获取了userValue并显示了素数。

function isPrime(value) {
  for(var i = 2; i < value; i++) {
      if(value % i === 0) {
          return false;
      }
  }
  return value > 1;
}


function generatePrime() {
  var userValue = document.getElementById("inputValue").value;
  var iter = 1;
  var returnValue = 2;
  //checks for an integer
  if (parseInt(userValue) === parseFloat(userValue)) {
    //checks if the user inputted a value above 0
    if (userValue > 0) {
      //loops to find the correct prime
      while (iter < userValue) {
        if (isPrime(returnValue)) {
          returnValue += 1;
          iter += 1;
        }
        if (!isPrime(returnValue)) {
          returnValue += 1;
        }
      }
    }
    else {
      returnValue = "That is not a number above 0!";
    }
  }
  else {
    returnValue = "That is not a number!";
  }
  document.getElementById("returnValue").innerHTML = returnValue;
}

我需要帮助才能返回正确的数字。

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

&#13;
&#13;
OperationContext oc = session.createOperationContext();
oc.setMaxItemsPerPage(10000); // batch size, default = 100
results = session.query(sb.toString(), false, oc);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

试试这个。

&#13;
&#13;
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;
}


function generatePrime() {
	var userValue = document.getElementById("inputValue").value;
	var value = 0, result = [];
	for (var i = 0; i < userValue; i++) {
		value = nextPrime(value);
		result.push(value);
	}
  document.getElementById("returnValue").innerHTML = result[userValue-1];
}
&#13;
<!DOCTYPE html>
<html>
<head>
<script>

</script>
</head>
<body>

Input value: <input type="text" name="inputValue" id="inputValue"/>
<button onclick="generatePrime()">Prime number</button>
<div id="returnValue">Test: </div>

</body>
</html>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以减少函数isPrime()的迭代范围:

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