在检查数字是否为素数之前检查数字是否为偶数(当然> 2)会提高性能吗?

Will checking if the number is even (of course > 2) before checking if it is a prime number increase the performance?

好吧,这个问题说明了一切,我还是会用一些代码来详细说明。简而言之:这两个代码中哪个更好? :

代码 1:

check for num==2 and num==1 ;)

if(num%2) {
    checkPrime(num) //function definition not needed
}
else {
    //not prime
}

代码 2:

check for num==2 and num==1 ;)

if(isPrime(num)) {
    //prime
}
else {
    //not prime
}

Neither checkPrime not isPrime checks for evenness

所有检查数字是否为质数的逻辑都应该包含在函数中。因此,您的第一个选择毫无意义。

你的第二个选项也不是最优的,因为检查均匀度是对我想你所指的简单经典素数测试算法的优化,所以检查应该在函数内部作为算法本身的一部分。

可以对经典算法进行一些优化,其中之一是检查均匀性,但所有这些都应该在函数中完成。

话虽这么说,但如果关注的是性能,请注意,有一些速度更快但复杂得多的算法。

对于一个简单的 isPrime() 函数,我使用类似于以下伪代码的东西:

isPrime(num)

  // Negatives, 0, 1 are not prime.
  if (num < 2)
    return false
  endif

  // 2 is the only even prime.
  if (num MOD 2 == 0)
    return (num == 2)
  endif

  // Try odd divisors.
  limit = 1 + sqrt(num)
  for (i <- 3 to limit step 2)
    if (num MOD i == 0)
      return false
    endif
  endfor

  // If we get this far, the number is prime.
  return true

end isPrime