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 |