diff options
author | 2021-06-17 16:39:07 +0200 | |
---|---|---|
committer | 2021-08-17 02:41:17 +0100 | |
commit | 6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7 (patch) | |
tree | b40a4c097c07eb855061e74df59c9bae911ac407 /eclass/qmail.eclass | |
parent | qmail.eclass: remove magic to query root group (diff) | |
download | gentoo-6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7.tar.gz gentoo-6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7.tar.bz2 gentoo-6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7.zip |
qmail.eclass: simplify is_prime()
The previous algorithm would scan for all primes for a given number, which
takes needlessly long.
Signed-off-by: Rolf Eike Beer <eike@sf-mail.de>
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'eclass/qmail.eclass')
-rw-r--r-- | eclass/qmail.eclass | 51 |
1 files changed, 18 insertions, 33 deletions
diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass index 8d05578dc3dd..3cd8497363b3 100644 --- a/eclass/qmail.eclass +++ b/eclass/qmail.eclass @@ -29,46 +29,31 @@ 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> +# @FUNCTION: is_prime +# @USAGE: <number> # @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 +# Checks wether a number is a valid prime number for queue split +is_prime() { + local number=${1} i + + if [[ ${number} -lt 7 ]]; then + # too small + return 1 + fi - [[ ${min} -le 2 ]] && result="${result} 2" + if [[ $[number % 2] == 0 ]]; then + return 1 + fi - for ((i = 3; i <= max; i += 2)) + # let i run up to the square root of number + for ((i = 3; i * i <= number; 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}" + if [[ $[number % i ] == 0 ]]; then + return 1 fi done - echo ${result} -} - -# @FUNCTION: is_prima -# @USAGE: <number> -# @DESCRIPTION: -# Checks wether a number is a prime number -is_prime() { - local number=${1} i - for i in $(primes ${number} ${number}) - do - [[ ${i} == ${number} ]] && return 0 - done - return 1 + return 0 } dospp() { |