Project Euler Problem64でとうとうカンニング

in

Project Euler再開してしばらくたちますがすでに壁にブチ当たってます。64問目にして、とうとうカンニングしちゃいました。だいたい、連分数って何よ!?っていう人間には難しすぎる。

というわけで、カツ丼食べながらHaskellで書いたのがこれ。

cfrac n =
  let
    o = sqrt n
    a = truncate o
    p = n - (fromIntegral a)^2
  in (a,truncate p)

cfracs n (l,p) =
  let
    a  = truncate (fromIntegral p /((sqrt n)- fromIntegral l))
    p' = (n - ((fromIntegral l)^2)) / fromIntegral p
    l' = (fromIntegral a * p') - (fromIntegral l)
    f' = (truncate l',truncate p')
  in
    if (cfrac n) == f' then a:[] else a : cfracs n f'

desc_cfrac n = (fst (cfrac n),a xss)
  where
    xss  = cfracs n (cfrac n)
    a xss'  = tail xss' ++ [head xss']

これで、√23の場合、

*Main> desc_cfrac 23
(4,[1,3,1,8])

みたいになります。

もうね、Problem 64 - もうカツ丼でいいよなって言われりゃ、ハイ、結構ですとしか言いようがないです。Haskellにカタカタ型型言われながらも、メゲずに続けていきますとも。

添付サイズ
p64.hs796 bytes

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/374

返信