Hamamatsu.rb #54 問題2 再回答

作成日:2015/07/11
最終更新日:2020/07/09

Hamamatsu.rb #54 問題2 再回答

作成日:2015/07/11
最終更新日:2020/07/09

概要

問題2

問題

1段目は1×1個、2段目は2×2個のレンガを使い、200段のピラミッドを作るとき、 使われているレンガの数は全部で何個?

証明

まず、\(n\)段目は\(n\)個である場合について考える。変数を\(k\)とし任意の正整数を取る。このとき以下の数式に着目する。

\[ \begin{align*} (k + 1)^2 & = k^2 + 2k + 1 \\ (k + 1)^2 - k^2 & = 2k + 1 \\ \end{align*} \tag{1} \]
式1. 

両辺について\(k=1,2,3,...,n\)の場合の総和を取る。

\[ \sum_{k=1}^{n} (k + 1)^2 - \sum_{k=1}^{n} k^2 = \sum_{k=1}^{n} 2k + \sum_{k=1}^{n} 1 \tag{2} \]
式2. 

式2.について左辺を整理する。

\[ (n + 1)^2 - 1 = \sum_{k=1}^{n} 2k + \sum_{k=1}^{n} 1 \tag{3} \]
式3. 

式3.について右辺を整理する。

\[ (n + 1)^2 - 1 = 2\sum_{k=1}^{n} k + n \tag{4} \]
式4. 

式4.を整理すると以下のようになる。

\[ \begin{align*} 2\sum_{k=1}^{n} k & = (n + 1)^2 - 1 - n \\ & = (n + 1)^2 - (n + 1) \\ & = (n + 1)(n + 1 - 1) \\ & = n(n + 1) \\\\ \end{align*} \tag{5} \]
式5. 

\[ \sum_{k=1}^{n} k = \frac{n(n + 1)}{2} \tag{6} \]
式6. 

同様に問題について考える。このとき以下の数式に着目する。

\[ \begin{align*} (k + 1)^3 & = k^3 + 3k^2 + 3k + 1 \\ (k + 1)^3 - k^3 & = 3k^2 + 3k + 1 \\ \end{align*} \tag{7} \]
式7. 

両辺について\(k=1,2,3,...,n\)の場合の総和を取る。

\[ \sum_{k=1}^{n} (k + 1)^3 - \sum_{k=1}^{n} k^3 = \sum_{k=1}^{n} 3k^2 + \sum_{k=1}^{n} 3k + \sum_{k=1}^{n} 1 \tag{8} \]
式8. 

式8.について左辺を整理する。

\[ (n + 1)^3 - 1 = \sum_{k=1}^{n} 3k^2 + \sum_{k=1}^{n} 3k + \sum_{k=1}^{n} 1 \tag{9} \]
式9. 

式9.について右辺を整理する。

\[ (n + 1)^3 - 1 = 3\sum_{k=1}^{n} k^2 + 3\sum_{k=1}^{n} k + n \tag{10} \]
式10. 

ここで式10.に式6.を代入する。

\[ (n + 1)^3 - 1 = 3\sum_{k=1}^{n} k^2 + \frac{3n(n + 1)}{2} + n \tag{11} \]
式11. 

式11.を整理すると以下のようになる。

\[ \begin{align*} 6\sum_{k=1}^{n} k^2 & = 2(n + 1)^3 - 2 - 2n + 3n(n + 1) \\ & = 2(n + 1)^3 - 2(n + 1) + 3n(n + 1) \\ & = (n + 1)(2(n + 1)^2 -2 + 3n) \\ & = (n + 1)(2n^2 + 4n + 2 -2 + 3n) \\ & = (n + 1)(2n^2 + n) \\ & = n(n + 1)(2n + 1) \\ \end{align*} \tag{12} \]
式12. 

\[ \sum_{k=1}^{n} k^2 = \frac{n(n + 1)(2n + 1)}{6} \tag{13} \]
式13. 

プログラム

式13.を用いて問題を解くプログラムを作成する。calcメソッドを呼び出すことで値が得られるようにする。今回は\(n=200\)なので200で初期化する。

ソース1. math_langur2.rb
class Math2
  def initialize(n)
    @num = n
  end
  def calc
    return  @num * (@num + 1) * (2 * @num + 1) / 6
  end
end

p Math2.new(200).calc

上記ソースコードをmath2_langur2.rbとして保存し、実行してみた。

コマンド1. コマンド実行結果
$ ruby ./math2_langur2.rb
2686700
$