diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-05-24 21:39:58 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2018-05-24 21:39:58 +0800 |
commit | 1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db (patch) | |
tree | abde0e4da3c7fe138f3874a94d8eb7d0e44c3224 /euler12.scm | |
download | project_euler-1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db.tar.xz |
initial commit
Diffstat (limited to 'euler12.scm')
-rw-r--r-- | euler12.scm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/euler12.scm b/euler12.scm new file mode 100644 index 0000000..e0d726f --- /dev/null +++ b/euler12.scm @@ -0,0 +1,41 @@ +(define (square x) (* x x)) +(define (power x n) + (if (= n 0) + 1 + (* x (power x (- n 1))))) + +(define (first-divisor x) + (define (try-iter d) + (cond ((= 0 (remainder x d)) d) + ((> (square d) x) x) + (else (try-iter (+ d 1))))) + (try-iter 2)) + +(define (divexp x d) + (if (= (remainder x d) 0) + (+ (divexp (/ x d) d) 1) + 0)) + +(define (ndiv n) + (define (pair d) + (cons (divexp n d) (/ n (expt d (divexp n d))))) + (if (= n 1) 1 + (let ((fd (first-divisor n))) + (* (+ 1 (car (pair fd))) + (ndiv (cdr (pair fd))))))) + +(define (kth-factor-triangle-over-n n) + (define (n-fac-tri n) + (if (even? n) + (* (ndiv (/ n 2)) (ndiv (+ n 1))) + (* (ndiv n) (ndiv (/ (+ n 1) 2))))) + (define (try-iter i) + (if (> (n-fac-tri i) n) + i + (try-iter (+ i 1)))) + (try-iter 1)) + +(display + ((lambda (x) (/ (* x (+ x 1)) 2)) + (kth-factor-triangle-over-n 500))) +(newline) |