Magicode logo
Magicode
1

【ピタゴラス】一緒に考えませんか? #Project Euler

2 min read

問9

ピタゴラスの定理a2+b2=c2a^2+b^2=c^2を満たす自然数にはa+b+c=1000a + b + c = 1000となる組が1つだけある

積abcを求めよ

Project Euler ※解法の公開は問1~100のみ可

考え方

リスト内包記法で簡単に書けそう

比で探せば計算量は少なくなるはず

solve :: Int
solve = (1000 `div` (x + y + z))^3 * x * y * z where
    (x, y, z) = head [(x, y, z) | z <- [1..], x <- [1..z],y <- [1..z], z^2 == x^2 + y^2, 1000 `mod` (x+y+z) == 0]

x+y+z==1000という条件では無駄がでる可能性があるので1000を割り切るという形で表した


31875000

末筆ながら

ご意見求む!!

数学的に条件を狭めていけばもっと効率よくできるはず

Haskellerさんへ

計算量, 見やすさ, 文化的な観点から見て改善点や他回答があればぜひお願いします!

スキル指標

実務1年程度のへっぽこプログラマーなので暖かくも厳しく見守ってください

読んだ本

  • すごいH本
  • 関数プログラミング実践入門
  • 関数プログラミングの楽しみ (途中)

7と10はprimesモジュール必須なのでパス

Discussion

コメントにはログインが必要です。