This commit is contained in:
Arthur Guiot 2024-07-17 10:41:09 +09:00 committed by GitHub
commit fcf8cdbab8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -8,25 +8,19 @@ export default function trialDivision(number) {
return false; return false;
} }
if (number <= 1) {
// If number is less than one then it isn't prime by definition.
return false;
}
if (number <= 3) { if (number <= 3) {
// All numbers from 2 to 3 are prime. // If number is less than one then it isn't prime by definition. But all numbers from 2 to 3 are prime.
return true; return number > 1;
} }
// If the number is not divided by 2 then we may eliminate all further even dividers. // If the number is not divided by 2 or 3 then we may eliminate all further even dividers.
if (number % 2 === 0) { if (number % 2 === 0 || number % 3 === 0) {
return false; return false;
} }
// If there is no dividers up to square root of n then there is no higher dividers as well. // If there is no dividers up to square root of divider then there is no higher dividers as well. To make the algorithm more efficient, we increment by 6 everytime, and make sure to check divider + 2 as well.
const dividerLimit = Math.sqrt(number); for (let divider = 5; number >= (divider * divider); divider += 6) {
for (let divider = 3; divider <= dividerLimit; divider += 2) { if (number % divider === 0 || number % (divider + 2) === 0) {
if (number % divider === 0) {
return false; return false;
} }
} }