在检查数字是否为素数之前检查数字是否为偶数(当然> 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
好吧,这个问题说明了一切,我还是会用一些代码来详细说明。简而言之:这两个代码中哪个更好? :
代码 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
notisPrime
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