Gentoo Archives: gentoo-dev

From: Rolf Eike Beer <eike@×××××××.de>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] [PATCH 3/5] qmail.eclass: simplify is_prime()
Date: Thu, 12 Aug 2021 09:55:47
Message-Id: 4644122.GXAFRqVoOG@eto.sf-tec.de
In Reply to: [gentoo-dev] [PATCH 1/3] qmail.eclass: support EAPI 8 by Rolf Eike Beer
1 The previous algorithm would scan for all primes for a given number, which
2 takes needlessly long.
3
4 Signed-off-by: Rolf Eike Beer <eike@×××××××.de>
5 ---
6 eclass/qmail.eclass | 51 ++++++++++++++++-----------------------------
7 1 file changed, 18 insertions(+), 33 deletions(-)
8
9 diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass
10 index 6ed026a1d9d..6ea27249c63 100644
11 --- a/eclass/qmail.eclass
12 +++ b/eclass/qmail.eclass
13 @@ -29,46 +29,31 @@ GENQMAIL_S="${WORKDIR}"/genqmail-${GENQMAIL_PV}
14 QMAIL_SPP_F=qmail-spp-${QMAIL_SPP_PV}.tar.gz
15 QMAIL_SPP_S="${WORKDIR}"/qmail-spp-${QMAIL_SPP_PV}
16
17 -# @FUNCTION: primes
18 -# @USAGE: <min> <max>
19 +# @FUNCTION: is_prime
20 +# @USAGE: <number>
21 # @DESCRIPTION:
22 -# Prints a list of primes between min and max inclusive
23 -# Note: this functions gets very slow when used with large numbers.
24 -primes() {
25 - local min=${1} max=${2}
26 - local result= primelist=2 i p
27 +# Checks wether a number is a valid prime number for queue split
28 +is_prime() {
29 + local number=${1} i
30 +
31 + if [[ ${number} < 7 ]]; then
32 + # too small
33 + return 0
34 + fi
35
36 - [[ ${min} -le 2 ]] && result="${result} 2"
37 + if [[ $[number % 2] == 0 ]]; then
38 + return 1
39 + fi
40
41 - for ((i = 3; i <= max; i += 2))
42 + # let i run up to the square root of number
43 + for ((i = 3; i * i <= number; i += 2))
44 do
45 - for p in ${primelist}
46 - do
47 - [[ $[i % p] == 0 || $[p * p] -gt ${i} ]] && \
48 - break
49 - done
50 - if [[ $[i % p] != 0 ]]
51 - then
52 - primelist="${primelist} ${i}"
53 - [[ ${i} -ge ${min} ]] && \
54 - result="${result} ${i}"
55 + if [[ $[number % i ] == 0 ]]; then
56 + return 1
57 fi
58 done
59
60 - echo ${result}
61 -}
62 -
63 -# @FUNCTION: is_prima
64 -# @USAGE: <number>
65 -# @DESCRIPTION:
66 -# Checks wether a number is a prime number
67 -is_prime() {
68 - local number=${1} i
69 - for i in $(primes ${number} ${number})
70 - do
71 - [[ ${i} == ${number} ]] && return 0
72 - done
73 - return 1
74 + return 0
75 }
76
77 dospp() {
78 --
79 2.26.2

Attachments

File name MIME type
signature.asc application/pgp-signature

Replies

Subject Author
Re: [gentoo-dev] [PATCH 3/5] qmail.eclass: simplify is_prime() Ulrich Mueller <ulm@g.o>
[gentoo-dev] [PATCH 3/3] qmail.eclass: simplify is_prime() Rolf Eike Beer <eike@×××××××.de>