Skip to content

Commit 51228e0

Browse files
committed
Improved prime factor check
1 parent 3025467 commit 51228e0

File tree

1 file changed

+40
-57
lines changed

1 file changed

+40
-57
lines changed

src/primes/is-prime.js

Lines changed: 40 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,44 @@
11
(function (exports) {
2-
'use strict';
3-
4-
/**
5-
* Advanced (optimised) method for checking if provided number is prime.
6-
* For example for number 104743 it should return true, for 104744 - false.
7-
*
8-
* @module primes/is-prime
9-
* @param {Number} number - Number that we check on prime.
10-
* @returns {Boolean} Will return true if provided number is prime.
11-
*
12-
* @example
13-
* var isPrime = require('path-to-algorithms/src/is-prime').isPrime;
14-
*
15-
* console.log(isPrime(7)); // true
16-
* console.log(isPrime(18)); // false
17-
*/
18-
exports.isPrime = function (number) {
19-
if (number === 1) {
20-
return false;
21-
22-
} else if (number < 4) {
23-
/**
24-
* 2 and 3 are prime
25-
*/
26-
return true;
27-
28-
} else if (number % 2 === 0) {
29-
return false;
30-
31-
} else if (number < 9) {
32-
/**
33-
* We have already excluded 4,6 and 8
34-
*/
35-
return true;
36-
37-
} else if (number % 3 === 0) {
38-
return false;
39-
40-
} else {
41-
/**
42-
* 'number' rounded to the greatest integer 'rounded' so that:
43-
* rounded * rounded <= number
44-
*/
45-
var rounded = Math.floor(Math.sqrt(number));
46-
var factor = 5;
47-
while (factor <= rounded) {
48-
if (number % factor === 0) {
49-
return false;
2+
'use strict';
3+
4+
/**
5+
* Advanced (optimised) method for checking if provided number is prime.
6+
* For example for number 104743 it should return true, for 104744 - false.
7+
*
8+
* @module primes/is-prime
9+
* @param {Number} number - Number that we check on prime.
10+
* @returns {Boolean} Will return true if provided number is prime.
11+
*
12+
* @example
13+
* var isPrime = require('path-to-algorithms/src/is-prime').isPrime;
14+
*
15+
* console.log(isPrime(7)); // true
16+
* console.log(isPrime(18)); // false
17+
*/
18+
exports.isPrime = function (number) {
19+
20+
if (number < 2)
21+
return false;
22+
23+
if (number % 2 === 0)
24+
return (number === 2);
25+
if (number % 3 === 0)
26+
return (number === 3);
27+
28+
var horizon = Math.floor(Math.sqrt(number));
29+
var factor = 5;
30+
31+
while (factor <= horizon) {
32+
33+
if (number % factor === 0)
34+
return false;
35+
36+
if (number % (factor + 2) === 0)
37+
return false;
38+
39+
factor += 6;
5040
}
51-
if (number % (factor + 2) === 0) {
52-
return false;
53-
}
54-
factor += 6;
55-
}
56-
}
57-
58-
return true;
59-
};
41+
return true;
42+
};
6043

6144
}(typeof exports === 'undefined' ? window : exports));

0 commit comments

Comments
 (0)