Question

I have to find the lcm of all the numbers 1 through and including 20, and I came up with this code. It, although is inefficient and also comes up with an answer that is 2 more than the correct answer. Could anyone tell me why?

//variable used to shut off the while loop.
divisable = false;

var i = 2;

//function to prove if the number is a lcm

var isDivisable = function(number){
    for(var i = 2; i<=20; i++){
        if(number%i !== 0){
            divisable = false;
            //  added the break to shut down the function, 
            //  as no other loops need to be counted
            break;
        }else{
            divisable = true;
        }
    }
};    


while(!divisable){
    isDivisable(i);

    i+=2;
}
Was it helpful?

Solution

What was wrong with my code?

isDivisible keeps executing until divisible is set to true (from your while loop), where your for loop will do all that for you. Also, you're putting i+=2 in the while loop, which adds 2 to the result, after your program stops spazzing out from executing isDivisible so many times.

How to fix?

Remove the while loop, and just call isDivisable manually.

var isDivisable = function(number){
    if (number % 1 == 0) {
    for(var i = 2; i<=20; i++){
        if(number%i !== 0){
            divisable = false;
            //  added the break to shut down the function, 
            //  as no other loops need to be counted
            break;
        }else{
            divisable = true;
            alert(i);
        }
    }else
    {
        alert('Your number is not divisible.');
    }
};    

isDivisable(6); //Replace with a number

The result is that i will be the multiple.

Additional Notes

isDivisible is spelled wrong in your code, as isDivisable.

OTHER TIPS

For fun:

[0, 1, 2, 3, 4, 5, 6].map(function(i) {
    if(this % i == 0)
        alert(i);
}, 6);

Should alert when the value contained in the array ([0, . . ., 6]) is a multiple of the value passed to the callback (in this case 6). See Array.prototype.map().

http://jsfiddle.net/5nSE4/1/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top