58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
|
(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));
|