Problem 9 » 履歴 » バージョン 4
Noppi, 2023/12/28 03:01
| 1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] |
|---|---|---|---|
| 2 | # [[Problem 9]] |
||
| 3 | |||
| 4 | 3 | Noppi | ## Special Pythagorean Triplet |
| 5 | A Pythagorean triplet is a set of three natural numbers, $a \lt b \lt c$, for which, |
||
| 6 | $$a^2 + b^2 = c^2.$$ |
||
| 7 | For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$. |
||
| 8 | There exists exactly one Pythagorean triplet for which $a + b + c = 1000$. |
||
| 9 | Find the product $abc$. |
||
| 10 | |||
| 11 | ## 特別なピタゴラス数 |
||
| 12 | ピタゴラス数(ピタゴラスの定理を満たす自然数)とは a < b < c で以下の式を満たす数の組である. |
||
| 13 | $$a^2 + b^2 = c^2.$$ |
||
| 14 | 例えば, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$ である. |
||
| 15 | a + b + c = 1000 となるピタゴラスの三つ組が一つだけ存在する. |
||
| 16 | これらの積 abc を計算しなさい. |
||
| 17 | |||
| 18 | 1 | Noppi | ```scheme |
| 19 | #!r6rs |
||
| 20 | #!chezscheme |
||
| 21 | |||
| 22 | (import (chezscheme)) |
||
| 23 | |||
| 24 | 4 | Noppi | (define sum-1000-triplets |
| 25 | (let loop1 ([a 1] [result '()]) |
||
| 26 | 1 | Noppi | (if (< 333 a) |
| 27 | 4 | Noppi | result |
| 28 | (let loop2 ([b a] [result result]) |
||
| 29 | 1 | Noppi | (if (< 499 b) |
| 30 | 4 | Noppi | (loop1 (add1 a) result) |
| 31 | 1 | Noppi | (let ([c (- 1000 a b)]) |
| 32 | 4 | Noppi | (loop2 (add1 b) (cons `(,a ,b ,c) result)))))))) |
| 33 | |||
| 34 | (define (pythagorean? a b c) |
||
| 35 | (= (+ (expt a 2) (expt b 2)) |
||
| 36 | (expt c 2))) |
||
| 37 | |||
| 38 | (define pythagorean-triplets |
||
| 39 | (filter |
||
| 40 | (lambda (lis) |
||
| 41 | (apply pythagorean? lis)) |
||
| 42 | sum-1000-triplets)) |
||
| 43 | |||
| 44 | (assert (= (length pythagorean-triplets) 1)) |
||
| 45 | |||
| 46 | (define answer-9 |
||
| 47 | (apply * (car pythagorean-triplets))) |
||
| 48 | 1 | Noppi | |
| 49 | (printf "9: ~D~%" answer-9) |
||
| 50 | ``` |