プロジェクト

全般

プロフィール

操作

ホーム - Project Euler

Problem 9

Special Pythagorean Triplet

A Pythagorean triplet is a set of three natural numbers, $a \lt b \lt c$, for which,
$$a^2 + b^2 = c^2.$$
For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$.
There exists exactly one Pythagorean triplet for which $a + b + c = 1000$.
Find the product $abc$.

特別なピタゴラス数

ピタゴラス数(ピタゴラスの定理を満たす自然数)とは a < b < c で以下の式を満たす数の組である.
$$a^2 + b^2 = c^2.$$
例えば, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$ である.
a + b + c = 1000 となるピタゴラスの三つ組が一つだけ存在する.
これらの積 abc を計算しなさい.

#!r6rs
#!chezscheme

(import (chezscheme))

(define sum-1000-triplets
  (let loop1 ([a 1] [result '()])
    (if (< 332 a)
      result
      (let loop2 ([b (add1 a)] [result result])
        (if (< 499 b)
          (loop1 (add1 a) result)
          (let ([c (- 1000 a b)])
            (loop2 (add1 b) (cons `(,a ,b ,c) result))))))))

(define (pythagorean? a b c)
  (= (+ (expt a 2) (expt b 2))
     (expt c 2)))

(define pythagorean-triplets
  (filter
    (lambda (lis)
      (apply pythagorean? lis))
    sum-1000-triplets))

(define answer-9
  (begin
    (assert (= (length pythagorean-triplets) 1))
    (apply * (car pythagorean-triplets))))

(printf "9: ~D~%" answer-9)

Noppi2023/12/29に更新 · 6件の履歴