Prime Numbers

isPrime vs array style

by mslocum

HTML

<h2>Count primes between numbers</h2>
<div>
    <label>Start: <input type="number" id="start" value="2"/></label>
    <label>End: <input type="number" id="end" value="1000000"/></label>
</div>
<div>
    <button id="array">Array Style</button>
    <!--<button id="isPrime">isPrime</button>-->
    <button id="isPrimeSqrt">isPrime SquareRoot</button>
</div>
<div id="log"></div>

JavaScript

$(function() {
    $('#array').click(function() {
        var start = parseInt($('#start').val(), 10), 
            end = parseInt($('#end').val(), 10),
            dStart = new Date(),
            iFound,
            dEnd;
        iFound = list(start, end);
        dEnd = new Date();
        log('Array: ' + iFound + ' time: ' + (dEnd - dStart));
    });
    $('#isPrime, #isPrimeSqrt').click(function(e) {
        var start = parseInt($('#start').val(), 10), 
            end = parseInt($('#end').val(), 10),
            dStart = new Date(),
            iFound,
            dEnd;
        iFound = checkEach(start, end, e.target.id === 'isPrimeSqrt');
        dEnd = new Date();
        log(e.target.id + ': ' + iFound + ' time: ' + (dEnd - dStart));
    });
});

function log(strLog) {
    $('#log').append(strLog + '<br/>');
}

function list(start, end) {
    function getPrimes(num) {
        var aPrimes = num > 1 ? [2] : [],
            iStop,
            i,
            j,
            bFound;
        for (i=3; i <= num; i += 2) {
            bFound = false;
            iStop = Math.floor(Math.sqrt(i));
            for (j=0; !bFound && j < aPrimes.length && aPrimes[j] <= iStop; j++) {
                if (i % aPrimes[j] === 0) {
                    bFound = true;
                }
            }
            if (!bFound) {
                aPrimes.push(i);
            }
        }
        return aPrimes;
    }
    
    var aPrimes = getPrimes(end),
        iFound = 0,
        i=0;
    
    for (i; i < aPrimes.length; i++) {
        if (aPrimes[i] >= start) {
            iFound++;
        }
    }

    return iFound;
}


function checkEach(start, end, bSqrt) {
    function isPrime(num) {
        if (num == 1) {
            return false;
        }
        if (num == 2) {
            return true;
        }
        if (num % 2 === 0) {
            return false;
        }
        var iStop = bSqrt ? Math.floor(Math.sqrt(num)) : num -1;
        
        for (var i=3; i <= iStop;...