read
1.22 의 풀이에 다음의 코드만 수정, 추가 한다.
[CODE]
(define (find-divisor n test-divisor)
(cond ((> (square test-divisor) n) n)
((divides? test-divisor n) test-divisor)
(else (find-divisor n (next test-divisor)))))
(define (next n)
(cond ((= n 2) 3)
((even? n) (+ n 1))
(else (+ n 2))))
[/CODE]
수행 결과
1.23 | 1.22 | rate | |
10,000 | 11 | 21 | 1.9090909 |
100,000 | 8 | 21 | 2.625 |
1,000,000 | 9 | 22 | 2.4444444 |
10,000,000 | 14 | 29 | 2.0714286 |
100,000,000 | 38 | 44 | 1.1578947 |
1,000,000,000 | 75 | 57 | 0.76 |
10,000,000,000 | 221 | 317 | 1.4343891 |
100,000,000,000 | 502 | 676 | 1.3466135 |
1,000,000,000,000 | 1575 | 2132 | 1.3536508 |
10,000,000,000,000 | 5039 | 6615 | 1.3127605 |
100,000,000,000,000 | 16397 | 21536 | 1.313411 |
결과를 보면 1.22 때에 비해서 2배가 빨라지진 않는다. 수행하는 명령어의 수가 절반으로 줄었으나 원래 알고리즘의 수행시간이 이었으므로 성능향상은 약 만큼 일어난다고 보는 게 옳다. 실험 결과를 봐도 1.3 배 정도로 1.414 와 비슷한 것을 알 수 있다.