public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH] qmail.eclass: simplify is_prime()
@ 2021-06-17 15:17 Rolf Eike Beer
  2021-06-17 17:42 ` Peter Stuge
  0 siblings, 1 reply; 6+ messages in thread
From: Rolf Eike Beer @ 2021-06-17 15:17 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 1660 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 | 45 ++++++++++++---------------------------------
 1 file changed, 12 insertions(+), 33 deletions(-)

diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass
index f42f0491515..aaec205a6bd 100644
--- a/eclass/qmail.eclass
+++ b/eclass/qmail.eclass
@@ -20,46 +20,25 @@ 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>
-# @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
-
-	[[ ${min} -le 2 ]] && result="${result} 2"
-
-	for ((i = 3; i <= max; 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}"
-		fi
-	done
-
-	echo ${result}
-}
-
-# @FUNCTION: is_prima
+# @FUNCTION: is_prime
 # @USAGE: <number>
 # @DESCRIPTION:
 # Checks wether a number is a prime number
 is_prime() {
 	local number=${1} i
-	for i in $(primes ${number} ${number})
+
+	if [[ $[number % 2] == 0 ]]; then
+		return 1
+	fi
+
+	for ((i = 3; i * i <= number; i += 2))
 	do
-		[[ ${i} == ${number} ]] && return 0
+		if [[ $[number % i ] == 0 ]]; then
+			return 1
+		fi
 	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 --]

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-06-18 19:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-17 15:17 [gentoo-dev] [PATCH] qmail.eclass: simplify is_prime() Rolf Eike Beer
2021-06-17 17:42 ` Peter Stuge
2021-06-17 20:27   ` Guilherme Amadio
2021-06-18 16:30     ` Ulrich Mueller
2021-06-18 19:10       ` Michael Orlitzky
2021-06-18 19:56         ` Rolf Eike Beer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox