Nikolova
Nikolova

Reputation: 57

Prime Check JavaScript

What have I done wrong with this code? It can't print anything on the console. Here it is the description of the problem:

Implement a javascript function that accepts an array containing an integer N and uses an expression to check if given N is prime (i.e. it is divisible without remainder only to itself and 1).

var n = ['2'];

function isPrime(n) {

    if (n < 2) {
      return false;
    }

    var isPrime = true;

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

    return isPrime;
}

return isPrime(n);

Upvotes: 2

Views: 585

Answers (5)

Alin3661
Alin3661

Reputation: 11

Full working code:

var n = ['2', '3', '4', '5', '6', '7']; // you can use as many values as you want function isPrime(n) { if (n < 2) { return false; } var isPrime = true; for (var i = 2; i <= Math.sqrt(n); i += 1) { // Thanks to gurvinder372's comment if (n % i === 0) { isPrime = false; } } return isPrime; } n.forEach(function(value) { // this is so you can iterate your array with js console.log('is ' + value + ' prime or not? ' + isPrime(value)); // this so you can print a message in the console }); /* // Another approach of parsing the data, uncomment this piece of code and comment the one above to see it in action (both will give the same result) for (index = 0; index < n.length; ++index) { console.log('is ' + n[index] + ' prime or not? ' + isPrime(n[index])); // this so you can print a message in the console } */

Upvotes: 0

B&#225;lint
B&#225;lint

Reputation: 4039

There are couple errors in your code.

First, you need to check for every integer between 2 and Math.sqrt(n) inclusively. Your current code returns true for 4.

I don't think this is in a function, so you need to omit return from return isPrime(n) and replace it with a function wich prints out the return value of the funnction, like alert or console.log.

n is not a number, it's an array. You need to either make n a number, or call the function with isPrime(n[0]).

The correct code is

var n = 2;

function isPrime(n) {

    if (n < 2) {
      return false;
    }

    var isPrime = true;

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

    return isPrime;
}

alert(isPrime(n));

Note: You can change n += 1 to n++, and it works the same way.

Upvotes: 4

gurvinder372
gurvinder372

Reputation: 68393

n is an array, you want to access first element in the array and convert it to number first.

try replacing

return isPrime(n);

with

return isPrime(parseInt(n[0],10));

Your for-loop condition also needs a little modification

for(var i = 2; i <= Math.sqrt(n); i += 1) { //observe that i is not <= Math.sqrt(n)

Upvotes: 1

Dylan Meeus
Dylan Meeus

Reputation: 5802

As to no output being printed, it is because you need to use console.log.

Replace return isPrime(n); with console.log(isPrime(n));.

Upvotes: 0

grateful
grateful

Reputation: 1128

A couple of little errors:

var n = 2;//<--no need to put n in an array

function isPrime(n) {
if (n < 2) {
    return false;
}
var isPrime = true;

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

isPrime(n);//<--no need for "return"

Upvotes: 0

Related Questions