The previous algorithm would scan for all primes for a given number, which
takes needlessly long.
Signedoffby: Rolf Eike Beer <eike@sfmail.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=qmailspp${QMAIL_SPP_PV}.tar.gz
QMAIL_SPP_S="${WORKDIR}"/qmailspp${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
takes needlessly long.
Signedoffby: Rolf Eike Beer <eike@sfmail.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=qmailspp${QMAIL_SPP_PV}.tar.gz
QMAIL_SPP_S="${WORKDIR}"/qmailspp${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