2023年6月号大問5

証明問題なので、この記事でやることはただの実験に過ぎません。
 a_{1} = 1, a_{2} = 2, a_{3} = 3, \;\; a_{n+3} = a_{n+2} + a_{n} \;\;(n=1,2,3, \cdots)
によって数列  a_{n} を定めるとき次式が成り立つことを示せ、というものです。
  \displaystyle a_{n} = \sum_{k=0}^{\lfloor \frac{n+1}{3} \rfloor} {}_{n+1-2k}C_{k}
さて実験してみましょう。二項係数の計算部分については以下のサイトを参考にしました。
tsujimotter.hatenablog.com

# -*- coding: utf-8 -*-
module Define
  module_function
  # 2項係数を計算する
  def binom(n,k)
   k = [k, n-k].min
   if (k==0) then
      val = 1
   else
      val = Define::binom(n-1,k-1)*n/k
   end
   return val
  end
end
if __FILE__ == $0 then
  nmax = 10
  aa = Array.new(nmax+1)
  bb = Array.new(nmax+1)

  # --- 漸化式による計算 --- #
  aa[1] = 1; aa[2] = 2; aa[3] = 3
  for nn in 1..nmax-3
    aa[nn+3] = aa[nn+2] + aa[nn]
  end

  # --- 二項係数による総和 --- #
  for nn in 1..nmax
    sum = 0
    for kk in 0..((nn+1)/3)
      sum += Define::binom(nn+1-2*kk,kk)
    end
    bb[nn] = sum
  end
  
  # --- 結果の出力 --- #
  p aa
  p bb
  p aa==bb
end

実行してみた結果が以下のとおりです。ちゃんと成立していますね。

$ ruby main.rb 
[nil, 1, 2, 3, 4, 6, 9, 13, 19, 28, 41]
[nil, 1, 2, 3, 4, 6, 9, 13, 19, 28, 41]
true
  • Rubyの場合、配列の要素番号は0始まりなので、最初の項は nil になっています。
  • ガウス記号のところはわざわざメソッド化しなくても、整数どうしの除算で整数部分だけ取り出せるので特に工夫していません。