1

Apologies if this has been covered somewhere. I've searched through a lot of prime number function answers on here but I cannot seem to find the answer to my issue. I have cobbled together a function to check if a number is prime, and then I'm running a for loop for numbers under 100 and printing out primes. My code does not print primes. It seems to start printing primes, but then throws a 9 in there, and it gets worse from there.

I found code that is seemingly identical to mine that successfully prints primes to the console. Below is my code; where is my error? For the record I am using jsfiddle, and I am very new at this.

function isPrime(number) {
  if (number < 2) {
    return false;
  }
  for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
      return false;
    } else {
      return true;
      }
  }
};

for (var i = 0; i < 100; i++) {
  if(isPrime(i)) {
   console.log(i);
  }
}
Frances
  • 11
  • 2
  • 1
    One "speed" improvement for this slow method of determining prime ... only need to loop up to `Math.sqrt(number);` - not an issue with such small numbers though – Jaromanda X Dec 23 '15 at 14:08

4 Answers4

0

You return true as soon as number is not divisible by i. Move your return true to the end:

function isPrime(number) {
    if (number < 2) return false;

    for (var i = 2; i < number; i++) { 
        if (number % i == 0) return false;
    }
    return true;
}

You only want to return true when you didn't find an i that divides number.

lex82
  • 11,173
  • 2
  • 44
  • 69
0

function isPrime(number) {
  var result = true;
  if (number < 2) {
    result = false;
  }
  for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
      result = false;
    }
  }
  return result;
};

for (var i = 0; i < 100; i++) {
  if(isPrime(i)) {
   console.log(i);
  }
}
  • yes you've corrected it; but you made it much much worse, speed-wise, when you replaced `return false` with `result=false`. – Will Ness Dec 23 '15 at 16:40
0

Your issue is in

if (number % i == 0) { 
  return false;
} else {
  return true;
}

As you return something in every case (true or false), your algorithm exits on every first cycle.

You should not return anything in the else statement :

if (number % i == 0) { 
  return false;
} else {
  // continue the for statement.
}

And get the function to return true after the for.

For the joke, a much faster algorithm would be :

function isPrime(number) {
    var primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
    if (primes.indexOf(number) > -1) {
        return true;
    } else {
        return false;
    }
};
-2
function isPrime(number) {
var check=true;
  if (number < 2) {
    return false;
  }
  for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
      check=false;
    } 
  }
   return check;
};

for (var i = 0; i < 100; i++) {
  if(isPrime(i)) {
   console.log(i);
  }
}
Umar Sharjeel
  • 108
  • 10