-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6_2.txt
72 lines (60 loc) · 1.72 KB
/
6_2.txt
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#lang racket
;(define (div_sum n)
; (if (= n 1)
; 1
; (let loop ((i 1) (sum 0))
; (cond ((= i (+ 1 (quotient n 2))) (+ sum n))
; ((= 0 (remainder n i)) (loop (+ i 1) (+ sum i)))
; (else (loop (+ i 1) sum))
; )
; )
; )
;)
(define (div_sum_rec n tmp)
(if (= n 1)
1
(if (= 0 (remainder tmp n))
(+ n (div_sum_rec (- n 1) tmp))
(div_sum_rec (- n 1) tmp)
)
)
)
(define (is-insufficient? n)
(< (div_sum_rec n n) (* 2 n))
)
(define (odd-deficient n)
(let loop ((i 1)(num 1))
(let ((check (is-insufficient? num)))
(cond ((and (= i n) check) num)
(check (loop (+ i 1) (+ num 2)))
(else (loop i (+ num 2)))
)
)
)
)
;------------------------------------
(define table (make-hash '()))
(define (memo-is-insufficient? n)
(let ((in-table (hash-ref table n #f)))
(if in-table
in-table
(let ((sum (div_sum_rec n n)))
(hash-set! table n (< sum (* 2 n)))
(< sum (* 2 n))
)
)
)
)
(define (memo-odd-deficient n)
(let loop ((i 1)(num 1))
(let ((check (memo-is-insufficient? num)))
(cond ((and (= i n) check) num)
(check (loop (+ i 1) (+ num 2)))
(else (loop i (+ num 2)))
)
)
)
)
;(memo-odd-deficient 10000)
;(memo-odd-deficient 9999)
Мемоизация может дает преимущество при вычислении больших значений подряд, так как часть из них уже была вычислена в процессе ранее. Однако при этом тратится много памяти для хранения всех значений.