Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (divisors n)
- (define upper-bound (isqrt n))
- (let loop ([counter 0]
- [divisor 1])
- (cond
- [(fx>? divisor upper-bound)
- (if (fx=? n (fx* upper-bound upper-bound))
- (fx- counter 1)
- counter)]
- [(fxzero? (fxremainder n divisor)) (loop (fx+ counter 2) (fx+ divisor 1))]
- [else (loop counter (fx+ divisor 1))])))
- (define (divides-times n divisor times)
- (let loop ([n n] [divisor divisor] [times times])
- (let ([i (/ n divisor)])
- (cond
- [(integer? i) (divides-times i divisor (+ times 1))]
- [else
- times]))))
- (define (euler12)
- (let loop ([num 1]
- [sum 1])
- (cond
- [(fx>? (divisors sum) 500) sum]
- [else (loop (fx+ num 1) (fx+ num sum 1))])))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement