パスワードを忘れた? アカウント作成

電車でみかけた臨海セミナーの問題」記事へのコメント

  • by route127 (38618) on 2019年11月29日 23時59分 (#3724093) 日記

    大人なので目的達成の為には手段を選ばない。
    四角数はともかく五角数を25段目まで力ずくで計算するのは出来るかもしれないが、与えられたおはじきの数からそれを三角数として段数を求めるのが難しかった。

    図形的に考えて、ある段数の三角数を2倍すれば同じ段数の四角数より少しだけ大きな数になるのを利用して平方根を取ることにした。
    三角数および五角数は再帰関数とした(横着して引数は1以上の場合だけ)。
    以下CommonLisp

    (defun triangle (x)
        (cond ((= x 1) 3)
            (t (+ (triangle (- x 1))
                        x 1))))
    (defun square (x) (* (+ 1 x) (+ 1 x)))
    (defun pentagon (x)
        (cond ((= x 1) 5)
            (t (+ (pentagon (- x 1))
                        (* x 3) 1))))
    (defun inv-triangle (x)
        (- (floor (sqrt (* 2 x)))
              1))

    (inv-triangle (- (pentagon 25) (square 25)))

    オイラーの五角数定理 [sakura.ne.jp]とかありましたな。

    ここに返信
    • by kamiyama (46596) on 2019年11月30日 1時45分 (#3724125) 日記

      なるほど.
      ワシは,最後は適当に20から計算しました(要するにループさせた).

      問題からは三角形作って何個か余る気がしましたが,ちょうどになるならもっと違う解き方したかもな(見苦しいいいわけ)

      • by kamiyama (46596) on 2019年11月30日 23時49分 (#3724386) 日記

        関数inv-triangleの最後の-1の導出が分からない...
        もう少し書くと,2倍して平方根取るのは説明されているからわかる.2倍すると多すぎるから減らしているのは想像できる.でも,減らすのが1でいいのを確定できるのかが分からない...

        ごりごり計算すると,m段に必要な5角形と4角形のそれぞれの個数の差をdとすると,構成できる3角形の段数は,
        \sqrt{2d + \frac{1}{4}} - \frac{3}{2}
        となる.
        このあたりまで計算すると,最後-1なのはわかるんだが,それを直観的(?)にやっているのは,すごいな,と.

犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー

処理中...