From 6c6747174ce018c0ab7e152e313c35bc594bee1a Mon Sep 17 00:00:00 2001 From: OM GUPTA Date: Fri, 22 Oct 2021 17:07:33 +0530 Subject: [PATCH] feat: updated the Prime number checking code to make it more efficient (#1714) * updated the code to make it more efficient * Update math/check_prime.cpp Co-authored-by: David Leal * Update math/check_prime.cpp Co-authored-by: David Leal * Apply suggestions from code review Co-authored-by: David Leal --- math/check_prime.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/math/check_prime.cpp b/math/check_prime.cpp index 3c3ff2b62..1e1bd975a 100644 --- a/math/check_prime.cpp +++ b/math/check_prime.cpp @@ -7,12 +7,13 @@ * @brief * Reduced all possibilities of a number which cannot be prime. * Eg: No even number, except 2 can be a prime number, hence we will increment - * our loop with i+2 jumping on all odd numbers only. If number is <= 1 or if it - * is even except 2, break the loop and return false telling number is not - * prime. + * our loop with i+6 jumping and check for i or i+2 to be a factor of the number; + * if it's a factor then we will return false otherwise true after the loop terminates at the terminating condition which is (i*i<=num) */ -#include -#include + +#include /// for assert +#include /// for IO operations + /** * Function to check if the given number is prime or not. * @param num number to be checked. @@ -23,14 +24,14 @@ bool is_prime(T num) { bool result = true; if (num <= 1) { return false; - } else if (num == 2) { + } else if (num == 2 || num==3) { return true; - } else if ((num & 1) == 0) { + } else if ((num%2) == 0 || num%3 == 0) { return false; } - if (num >= 3) { - for (T i = 3; (i * i) <= (num); i = (i + 2)) { - if ((num % i) == 0) { + else { + for (T i = 5; (i * i) <= (num); i = (i + 6)) { + if ((num % i) == 0 || (num%(i+2)==0 )) { result = false; break; }