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 |