Gentoo Archives: gentoo-dev

From: Rolf Eike Beer <eike@×××××××.de>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] [PATCH] qmail.eclass: simplify is_prime()
Date: Thu, 17 Jun 2021 15:17:37
Message-Id: 11770691.O9o76ZdvQC@eto.sf-tec.de
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 | 45 ++++++++++++---------------------------------
7 1 file changed, 12 insertions(+), 33 deletions(-)
8
9 diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass
10 index f42f0491515..aaec205a6bd 100644
11 --- a/eclass/qmail.eclass
12 +++ b/eclass/qmail.eclass
13 @@ -20,46 +20,25 @@ 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 -# @DESCRIPTION:
20 -# Prints a list of primes between min and max inclusive
21 -# Note: this functions gets very slow when used with large numbers.
22 -primes() {
23 - local min=${1} max=${2}
24 - local result= primelist=2 i p
25 -
26 - [[ ${min} -le 2 ]] && result="${result} 2"
27 -
28 - for ((i = 3; i <= max; i += 2))
29 - do
30 - for p in ${primelist}
31 - do
32 - [[ $[i % p] == 0 || $[p * p] -gt ${i} ]] && \
33 - break
34 - done
35 - if [[ $[i % p] != 0 ]]
36 - then
37 - primelist="${primelist} ${i}"
38 - [[ ${i} -ge ${min} ]] && \
39 - result="${result} ${i}"
40 - fi
41 - done
42 -
43 - echo ${result}
44 -}
45 -
46 -# @FUNCTION: is_prima
47 +# @FUNCTION: is_prime
48 # @USAGE: <number>
49 # @DESCRIPTION:
50 # Checks wether a number is a prime number
51 is_prime() {
52 local number=${1} i
53 - for i in $(primes ${number} ${number})
54 +
55 + if [[ $[number % 2] == 0 ]]; then
56 + return 1
57 + fi
58 +
59 + for ((i = 3; i * i <= number; i += 2))
60 do
61 - [[ ${i} == ${number} ]] && return 0
62 + if [[ $[number % i ] == 0 ]]; then
63 + return 1
64 + fi
65 done
66 - return 1
67 +
68 + return 0
69 }
70
71 dospp() {
72 --
73 2.26.2

Attachments

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

Replies

Subject Author
Re: [gentoo-dev] [PATCH] qmail.eclass: simplify is_prime() Peter Stuge <peter@×××××.se>