Advertisement
Guest User

PRIMES.SCM

a guest
May 22nd, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.92 KB | None | 0 0
  1. (define prime?
  2.   (lambda (n)
  3.     (let ((small-primes     (list 2 3 5 7))
  4.       (small-not-primes (list 0 1 4 6 8 9)))
  5.       (cond
  6.        ((< n 0) (prime? (- 0 n)))
  7.        ((is-contained? n small-primes) #t)
  8.        ((is-contained? n small-not-primes) #f)
  9.        ((has-divisor? n (list 2 3 5 7)) #f)
  10.        ((< n (least-useful-divisor-from n 11)) #f)
  11.        (else #t)))))
  12.  
  13. (define is-contained?
  14.   (lambda (n L)
  15.     (pertains? n L =)))
  16.  
  17. (define pertains?
  18.   (lambda (n L pred)
  19.     (cond
  20.      ((null? L) #f)
  21.      ((pred n (car L)) #t)
  22.      (else (pertains? n (cdr L) pred)))))
  23.  
  24. (define has-divisor?
  25.   (lambda (n L)
  26.     (pertains? n L multiple?)))
  27.  
  28. (define multiple?
  29.   (lambda (n k)
  30.     (= 0 (remainder n k))))
  31.  
  32. (define least-useful-divisor-from
  33.   (lambda (n k)
  34.     (cond
  35.      ((> (square k) n) n)
  36.      ((multiple? n k) k)
  37.      (else (least-useful-divisor-from n (+ 1 k))))))
  38.  
  39. (define square
  40.   (lambda (x) (* x x)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement