[英]Javascript: find first n prime numbers
function primeNumbers(n) {
array = [];
for (var i = 2; array.length < n; i++) {
for (var count = 2; count < i; count++) {
var divisorFound = false;
if (i % count === 0) {
divisorFound = true;
break;
}
}
if (divisorFound == false) {array.push[i];}
}
return array;
}
When I run this code, it seems to get stuck in an infinite loop and doesn't return anything... why?当我运行这段代码时,它似乎陷入了无限循环并且没有返回任何东西......为什么?
Try putting this line before your second loop:尝试将此行放在第二个循环之前:
var divisorFound = false;
So that this line can access it:以便此行可以访问它:
if (divisorFound == false) {array.push(i);}
Take note of the FIXED array.push(i) as NPE said.请注意 NPE 所说的 FIXED array.push(i) 。 :) :)
You may want to read about Variable Scope in JavaScript.您可能想阅读 JavaScript 中的变量范围。
In your code, array.push[i]
(with square brackets) doesn't do what you'd like it to.在您的代码中, array.push[i]
(带方括号)不会执行您想要的操作。 It leaves the array unchanged and returns undefined
.它使数组保持不变并返回undefined
。
You meant array.push(i)
(with parentheses).你的意思是array.push(i)
(带括号)。
This isn't the most advanced way to do this.这不是执行此操作的最先进方法。 Using a sieve would be better.用筛子会更好。 However, this is fairly decent and provides a good starting point for approaching prime number code challenges.然而,这是相当不错的,并且为解决质数代码挑战提供了一个很好的起点。
/*
* Get the first n prime numbers
*
* @param n Number (integer)
* @return Array
*
*/
function getNprimes(n){
const arr = [];
let i = 2
while (arr.length < n) {
if (isPrime(i)) {
arr.push(i)
}
i++
}
return arr;
/*
* @param n (integer)
* @return Boolean
*
*/
function isPrime(n) {
if ( n < 2 ) {
return false
}
for ( let i = 2; i <= Math.sqrt(n); i++ ) {
if ( n % i === 0 ) {
return false;
}
}
return true
}
}
此外,您永远不会为array
定义长度,因此 for 循环无法知道何时停止。
Actually to find n prime numbers its a lot more optimized [o(n*sqrt(m))] if you just check its sqrt(n).实际上,如果你只检查它的 sqrt(n),找到 n 个素数它会更加优化 [o(n*sqrt(m))]。 If it is not divisible by square root of n, it is not also divisible by n.如果它不能被 n 的平方根整除,它也不能被 n 整除。 here is an example:这是一个例子:
(function(n){ var primes=[]; for (var i=1;i<n;i++){ var prime=true; var rootI=Math.sqrt(i)+1; for (var j=2;j<rootI;j++){ if (i%j==0) {prime=false;break;} }; if (prime) primes.push(i); } document.write(primes.join('-')); })(100000)
The imana97 answare is not correct, because "1" is not prime, while "2" is it. imana97 answare 不正确,因为“1”不是素数,而“2”是。 Also they are not the first n numbers but the prime numers smaller than n.此外,它们不是前 n 个数字,而是小于 n 的素数。
So, my corrected version is:所以,我更正的版本是:
(function(n){ var primes=[2]; for (var i=2;primes.length<n;i++){ var prime=true; var rootI=Math.sqrt(i)+1; for (var j=2;j<rootI;j++){ if (i%j==0) {prime=false;break;} }; if (prime) primes.push(i); } document.write(primes.join('-')); })(10000)
<script>
// first n prime numbers
function checkPrime(number){
let temp=2;
while(temp<number){
if(number%temp == 0){
return false;
}
temp++;
}
return true;
}
function firstnPrime(number){
var count=0;
for(var i=2;i<=number;i++){
if(checkPrime(i)){
count++;
}
}
return count;
}
console.log(firstnPrime(100));
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.