summaryrefslogtreecommitdiff
path: root/prime?
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2024-08-04 21:01:32 -0600
committerbd <bdunahu@operationnull.com>2024-08-04 21:01:32 -0600
commit3324327b80a50e94843dedbb704683ee9b3a9955 (patch)
tree333f24d8de37c480a101f100a5ca539cc34552fe /prime?
parentc04ceb5f29e965bb2d9b37bf38f10f7a12a0cab0 (diff)
Cleanup prime?
Diffstat (limited to 'prime?')
-rw-r--r--prime?/prime-test.scm35
-rwxr-xr-xprime?/prime.scm17
2 files changed, 52 insertions, 0 deletions
diff --git a/prime?/prime-test.scm b/prime?/prime-test.scm
new file mode 100644
index 0000000..3add85a
--- /dev/null
+++ b/prime?/prime-test.scm
@@ -0,0 +1,35 @@
+;; -*- compile-command: "guile -L . prime-test.scm"; -*-
+(use-modules (srfi srfi-64)
+ (prime))
+
+(test-begin "harness")
+
+
+(test-assert "test-not-prime-0"
+ (not (prime? 12)))
+
+(test-assert "test-not-prime-1"
+ (not (prime? 21)))
+
+(test-assert "test-prime"
+ (prime? 13))
+
+(test-assert "test-prime-large"
+ (prime? 1000033))
+
+(test-assert "test-two"
+ (prime? 2))
+
+;; one is NOT considered prime!
+(test-assert "test-one"
+ (not (prime? 1)))
+
+;; zero is NOT considered prime!
+(test-assert "test-zero"
+ (not (prime? 0)))
+
+(test-assert "test-negative"
+ (not (prime? -13)))
+
+
+(test-end "harness")
diff --git a/prime?/prime.scm b/prime?/prime.scm
new file mode 100755
index 0000000..3d08a35
--- /dev/null
+++ b/prime?/prime.scm
@@ -0,0 +1,17 @@
+(define-module (prime))
+
+
+(define-public (prime? n)
+ "Returns #t if N is prime, else #f."
+
+ (define (prime-helper n d)
+ "Recursively checks if N is a prime number
+by attempting division by number D,D-1,D-2..."
+ (cond
+ ((< d 2) #t)
+ ((zero? (remainder n d)) #f)
+ (#t (prime-helper n (1- d)))))
+
+ (if (< n 2)
+ #f
+ (prime-helper n (quotient n 2))))