(function (exports) { 'use strict'; /** * Sieve of Eratosthenes. * * Simple, ancient algorithm for finding all prime numbers up to given limit. * * Returns list of primes up to specified limit. * * For example, for limit 10 it should return following list of primes: * [2, 3, 5, 7]. * * @module primes/sieve-of-eratosthenes * @param {Number} limit - Algorithm will returns list of primes up to * specified limit. * @returns {Array} Will return list with all prime numbers up to provided. * limit. * * @example * var sieveOfEratosthenes = * require('path-to-algorithms/src/sieve-of-eratosthenes').sieveOfEratosthenes; * * console.log(sieveOfEratosthenes(12)); // [2, 3, 5, 7, 11] */ exports.sieveOfEratosthenes = function (limit) { var sieve = []; var primes = []; var k; var l; sieve[1] = false; for (k = 2; k <= limit; k += 1) { sieve[k] = true; } for (k = 2; k * k <= limit; k += 1) { if (sieve[k] !== true) { continue; } for (l = k * k; l <= limit; l += k) { sieve[l] = false; } } sieve.forEach(function (value, key) { if (value) { this.push(key); } }, primes); return primes; }; }(typeof exports === 'undefined' ? window : exports));