From: Rolf Eike Beer <eike@sf-mail.de>
To: gentoo-dev@lists.gentoo.org
Subject: [gentoo-dev] [PATCH 3/5] qmail.eclass: simplify is_prime()
Date: Thu, 12 Aug 2021 11:55:41 +0200 [thread overview]
Message-ID: <4644122.GXAFRqVoOG@eto.sf-tec.de> (raw)
In-Reply-To: <11806398.O9o76ZdvQC@eto.sf-tec.de>
[-- Attachment #1: Type: text/plain, Size: 1881 bytes --]
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>
---
eclass/qmail.eclass | 51 ++++++++++++++++-----------------------------
1 file changed, 18 insertions(+), 33 deletions(-)
diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass
index 6ed026a1d9d..6ea27249c63 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} < 7 ]]; then
+ # too small
+ return 0
+ 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() {
--
2.26.2
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
next prev parent reply other threads:[~2021-08-12 9:55 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-12 9:54 [gentoo-dev] [PATCH 1/3] qmail.eclass: support EAPI 8 Rolf Eike Beer
2021-08-12 9:55 ` [gentoo-dev] [PATCH 2/3] qmail.eclass: hardcode root group Rolf Eike Beer
2021-08-12 11:13 ` Ulrich Mueller
2021-08-12 14:03 ` Rolf Eike Beer
2021-08-12 15:22 ` [gentoo-dev] [PATCH 2/3] qmail.eclass: remove magic to query " Rolf Eike Beer
2021-08-12 17:39 ` Michael Orlitzky
2021-08-13 7:17 ` Rolf Eike Beer
2021-08-13 9:06 ` Ulrich Mueller
2021-08-13 10:31 ` Rolf Eike Beer
2021-08-14 10:43 ` David Seifert
2021-08-14 9:36 ` [gentoo-dev] [PATCH 2/3 v3] " Rolf Eike Beer
2021-08-14 10:52 ` Ulrich Mueller
2021-08-14 11:11 ` Rolf Eike Beer
2021-08-14 11:54 ` Ulrich Mueller
2021-08-14 11:34 ` [gentoo-dev] [PATCH 2/3 v4] " Rolf Eike Beer
2021-08-12 9:55 ` Rolf Eike Beer [this message]
2021-08-12 11:25 ` [gentoo-dev] [PATCH 3/5] qmail.eclass: simplify is_prime() Ulrich Mueller
2021-08-12 15:25 ` Rolf Eike Beer
2021-08-12 15:25 ` [gentoo-dev] [PATCH 3/3] " Rolf Eike Beer
2021-08-13 7:47 ` [gentoo-dev] [PATCH 4/3] qmail.eclass: remove needless keepdirs Rolf Eike Beer
2021-08-14 11:47 ` [gentoo-dev] [PATCH 4/3 v2] " Rolf Eike Beer
2021-08-13 10:44 ` [gentoo-dev] [PATCH 5/3] qmail.eclass: retire qmail_tcprules_fixup() Rolf Eike Beer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4644122.GXAFRqVoOG@eto.sf-tec.de \
--to=eike@sf-mail.de \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox