The previous algorithm would scan for all primes for a given number, which takes needlessly long.
Signed-off-by: Rolf Eike Beer <e...@sf-mail.de> --- eclass/qmail.eclass | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass index f42f0491515..aaec205a6bd 100644 --- a/eclass/qmail.eclass +++ b/eclass/qmail.eclass @@ -20,46 +20,25 @@ GENQMAIL_S="${WORKDIR}"/genqmail-${GENQMAIL_PV} QMAIL_SPP_F=qmail-spp-${QMAIL_SPP_PV}.tar.gz QMAIL_SPP_S="${WORKDIR}"/qmail-spp-${QMAIL_SPP_PV} -# @FUNCTION: primes -# @USAGE: <min> <max> -# @DESCRIPTION: -# Prints a list of primes between min and max inclusive -# Note: this functions gets very slow when used with large numbers. -primes() { - local min=${1} max=${2} - local result= primelist=2 i p - - [[ ${min} -le 2 ]] && result="${result} 2" - - for ((i = 3; i <= max; i += 2)) - do - for p in ${primelist} - do - [[ $[i % p] == 0 || $[p * p] -gt ${i} ]] && \ - break - done - if [[ $[i % p] != 0 ]] - then - primelist="${primelist} ${i}" - [[ ${i} -ge ${min} ]] && \ - result="${result} ${i}" - fi - done - - echo ${result} -} - -# @FUNCTION: is_prima +# @FUNCTION: is_prime # @USAGE: <number> # @DESCRIPTION: # Checks wether a number is a prime number is_prime() { local number=${1} i - for i in $(primes ${number} ${number}) + + if [[ $[number % 2] == 0 ]]; then + return 1 + fi + + for ((i = 3; i * i <= number; i += 2)) do - [[ ${i} == ${number} ]] && return 0 + if [[ $[number % i ] == 0 ]]; then + return 1 + fi done - return 1 + + return 0 } dospp() { -- 2.26.2
signature.asc
Description: This is a digitally signed message part.