« Project Euler : Problem 44 ~ 五角数 | トップページ | Project Euler : Problem 46 ~ Goldbach予想 »

2010年8月26日 (木)

Project Euler : Problem 45 ~ 三角数、五角数、六角数

 問題はこちらをご覧ください。
 また、自作の "ForEuler module" に関してはこちらをご覧ください。

 

 六角数は必ず三角数になります。したがって、この問題は 40755 より大きい五角数かつ六角数を探せばいいことになります。
 今回は単純に「五角数」のリストと「六角数」のリストを小さい方から比べていきました。

import ForEuler (polyNumList) -- 40755 より大きい五角数 pentagon :: [Integer] pentagon = dropWhile (<= 40755) $ polyNumList 5 -- 40755 より大きい六角数 hexagon :: [Integer] hexagon = dropWhile (<= 40755) $ polyNumList 6 problem045 :: Integer problem045 = iter hexagon pentagon where iter (h : hs) ps | h == p = h | otherwise = iter hs ps' where ps'@(p : _) = dropWhile (< h) ps main :: IO () main = print problem045
 コンパイルして実行すると私のノートパソコン(Pentium M, 1500MHz)では、約 0.05 秒で答えが出ました。
 リスト操作を繰り返す割には速く結果が出ました。

« Project Euler : Problem 44 ~ 五角数 | トップページ | Project Euler : Problem 46 ~ Goldbach予想 »

Haskell」カテゴリの記事

Project Euler」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/49257399

この記事へのトラックバック一覧です: Project Euler : Problem 45 ~ 三角数、五角数、六角数:

« Project Euler : Problem 44 ~ 五角数 | トップページ | Project Euler : Problem 46 ~ Goldbach予想 »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ