summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRolf Eike Beer <eike@sf-mail.de>2021-06-17 16:39:07 +0200
committerSam James <sam@gentoo.org>2021-08-17 02:41:17 +0100
commit6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7 (patch)
treeb40a4c097c07eb855061e74df59c9bae911ac407 /eclass/qmail.eclass
parentqmail.eclass: remove magic to query root group (diff)
downloadgentoo-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.eclass51
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() {