Skip to content

Commit b98ea12

Browse files
committed
Merge pull request mgechev#82 from infusion/master
Improved prime check and Fisher Yates
2 parents 3025467 + 5066376 commit b98ea12

File tree

2 files changed

+21
-33
lines changed

2 files changed

+21
-33
lines changed

src/primes/is-prime.js

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,45 +16,33 @@
1616
* console.log(isPrime(18)); // false
1717
*/
1818
exports.isPrime = function (number) {
19-
if (number === 1) {
19+
20+
if (number < 2) {
2021
return false;
22+
}
2123

22-
} else if (number < 4) {
23-
/**
24-
* 2 and 3 are prime
25-
*/
26-
return true;
24+
if (number % 2 === 0) {
25+
return (number === 2);
26+
}
2727

28-
} else if (number % 2 === 0) {
29-
return false;
28+
if (number % 3 === 0) {
29+
return (number === 3);
30+
}
3031

31-
} else if (number < 9) {
32-
/**
33-
* We have already excluded 4,6 and 8
34-
*/
35-
return true;
32+
var horizon = Math.floor(Math.sqrt(number));
33+
var factor = 5;
3634

37-
} else if (number % 3 === 0) {
38-
return false;
35+
while (factor <= horizon) {
3936

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;
50-
}
51-
if (number % (factor + 2) === 0) {
52-
return false;
53-
}
54-
factor += 6;
37+
if (number % factor === 0) {
38+
return false;
5539
}
56-
}
5740

41+
if (number % (factor + 2) === 0) {
42+
return false;
43+
}
44+
factor += 6;
45+
}
5846
return true;
5947
};
6048

src/shuffle/fisheryates.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
var size = array.length;
2222
var rand;
2323
var temp;
24-
for (var i = 1; i < size; i += 1) {
25-
rand = Math.round(Math.random() * i);
24+
for (var i = 0; i < size; i += 1) {
25+
rand = Math.floor(i + Math.random() * (size - i));
2626
temp = array[rand];
2727
array[rand] = array[i];
2828
array[i] = temp;

0 commit comments

Comments
 (0)