-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path03.ss
More file actions
26 lines (21 loc) · 649 Bytes
/
03.ss
File metadata and controls
26 lines (21 loc) · 649 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#lang scheme
;; Stolen from the prose at
;; http://blog.functionalfun.net/2008/03/project-euler-problem-3.html
(define (first-number-which-divides n)
(let loop ([candidate 2])
(if (zero? (remainder n candidate))
candidate
(loop (add1 candidate)))))
(define (reduce-by n p)
(let loop ([n n])
(let-values (((q r) (quotient/remainder n p)))
(if (zero? r)
(loop q)
n))))
(define (largest-prime-factor n)
(let* ([p (first-number-which-divides n)]
[reduced (reduce-by n p)])
(if (= 1 reduced)
p
(largest-prime-factor reduced))))
(largest-prime-factor 600851475143)