diff options
Diffstat (limited to 'prime')
-rw-r--r-- | prime/prime-test.scm | 42 | ||||
-rwxr-xr-x | prime/prime.scm | 17 |
2 files changed, 59 insertions, 0 deletions
diff --git a/prime/prime-test.scm b/prime/prime-test.scm new file mode 100644 index 0000000..a1c7562 --- /dev/null +++ b/prime/prime-test.scm @@ -0,0 +1,42 @@ +(use-modules (srfi srfi-64) + (prime)) + +(test-begin "harness") + + +(test-equal "test-not-prime-0" + #f + (prime? 12)) + +(test-equal "test-not-prime-1" + #f + (prime? 21)) + +(test-equal "test-prime" + #t + (prime? 13)) + +(test-equal "test-prime-large" + #t + (prime? 1000033)) + +(test-equal "test-two" + #t + (prime? 2)) + +;; one is NOT considered prime! +(test-equal "test-one" + #f + (prime? 1)) + +;; zero is NOT considered prime! +(test-equal "test-zero" + #f + (prime? 0)) + +(test-equal "test-negative" + #f + (prime? -13)) + + +(test-end "harness") diff --git a/prime/prime.scm b/prime/prime.scm new file mode 100755 index 0000000..e12dfb4 --- /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." + (if (< n 2) + #f + (prime-helper n (quotient n 2)))) + +(define (prime-helper n d) + "Recursively checks if N is a prime number +by attempting division by number D,D-1,D-2..." + (if (< d 2) + #t + (if (equal? (remainder n d) 0) + #f + (prime-helper n (- d 1))))) |