Problem 10 » 履歴 » バージョン 1
Noppi, 2023/12/27 01:59
| 1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] |
|---|---|---|---|
| 2 | # [[Problem 10]] |
||
| 3 | |||
| 4 | ```scheme |
||
| 5 | #!r6rs |
||
| 6 | #!chezscheme |
||
| 7 | |||
| 8 | (import (chezscheme)) |
||
| 9 | |||
| 10 | (define answer-10 |
||
| 11 | (let ((table (make-vector 2000001 #t)) |
||
| 12 | (count (isqrt 2000000))) |
||
| 13 | (vector-set! table 0 #f) |
||
| 14 | (vector-set! table 1 #f) |
||
| 15 | |||
| 16 | (let loop1 ((index 2)) |
||
| 17 | (cond |
||
| 18 | [(< count index) |
||
| 19 | (let loop2 ((index 0) (result 0)) |
||
| 20 | (cond |
||
| 21 | [(< 2000000 index) result] |
||
| 22 | [(vector-ref table index) |
||
| 23 | (loop2 (add1 index) (+ result index))] |
||
| 24 | [else (loop2 (add1 index) result)]))] |
||
| 25 | [(vector-ref table index) |
||
| 26 | (let loop3 ((current (* index 2))) |
||
| 27 | (cond |
||
| 28 | [(< 2000000 current) |
||
| 29 | (loop1 (add1 index))] |
||
| 30 | [else |
||
| 31 | (vector-set! table current #f) |
||
| 32 | (loop3 (+ current index))]))] |
||
| 33 | [else (loop1 (add1 index))])))) |
||
| 34 | |||
| 35 | (printf "10: ~D~%" answer-10) |
||
| 36 | ``` |