John the User - 1 month ago 8
Javascript Question

# How to find prime factors using a for loop in Javascript?

I'm new to javascript and was trying to find the prime factors of a number, recorded below as 'integer' using a for loop in javascript. I can't seem to get it working and I'm not sure whether it's my javascript or my calculation logic. I tried to add comments so that you can see what I think my program is doing at that time. Correct me if I'm wrong.

Any help will be appreciated. Here's my code:

``````//integer is the value for which we are finding prime factors
var integer = 13195;

var primeArray = [];

//find divisors starting with 2

for (i = 2; i < integer/2; i++) {
if (integer % i == 0) {

//check if divisor is prime
for (var j = 2; j <= i / 2; j++) {
if (i % j == 0) {
isPrime = false;
} else {
isPrime = true;
}
}

//if divisor is prime

if (isPrime == true) {
//divide integer by prime factor & factor store in array primeArray
integer /= i
primeArray.push(i);
}
}
}

for (var k = 0; k < primeArray.length; k++) {
console.log(primeArray[k]);
}``````

Here's a working solution:

``````//integer is the value for which we are finding prime factors
var integer = 13195,
primeArray = [],
isPrime;

//find divisors starting with 2

for(i = 2; i <= integer; i++){
if (integer % i==0) {

//check if divisor is prime
for(var j = 2; j <= i/2; j++) {
if(i % j == 0) {
isPrime = false;
} else {
isPrime = true;
}
}

//if divisor is prime

if (isPrime == true) {
//divide integer by prime factor & factor store in array primeArray
integer /= i
primeArray.push(i);
}
}
}

for (var k = 0; k < primeArray.length; k++) {
console.log(primeArray[k]);
}``````

You were very much on the right track. There were a two minor mistakes. The evaluation of `integer - 1` seemd to be incorrect. I believe the more appropriate evaluation is `<= integer` in your outer `for` loop. This is because when you divide your integer below `integer /= i`, this results in the final integer evaluation to be `29`. The final prime divsor in this case is also `29` and as such will need to be evaluated as `<=` as oppose to `< integer - 1`.

As for why the final log statment isn't working, there was a simple typo of `primeArray[i]` as oppose to `primeArray[k]`.