算額(その1540)
竹束(ちくそく)問題
源為憲:口遊(くちずさみ),天禄元年(970)
中村信弥:和算家 北明 寺島宗伴
http://www.wasan.jp/terasima/terasima.html
図のような竹の束がある。周員(外側の赤い竹の本数)が 21 本のとき,総本数はいかほどか。
SymPy では,以下の 2 つの関数を使う
実際の数列 a を作る
a = sympy.sequence(第 n 項の式, (n, 最初の項, 最後の項))
部分列の和の一般項
summation(a.formula, (n, 最初の項, 最後の項))
竹の本数は,3, 9, 15, ... の等差級数なので,「第n項の式」は 6n - 3
using SymPy
@syms n, m
b = sympy.sequence(6n - 3, (n, 1, 10))
[3, 9, 15, 21, ...]
1 から m までの部分列の和の式は以下で求まる。
Sm = summation(b.formula, (n, 1, m))
Sm |> println
3*m^2
外側の竹が 21 本は,何項目かは (21 + 初項)/公差で求まる。
(21 + 3)/6 |> println
4.0
Sm の m に代入すると,総和が求まる。
Sm(m => 4) |> println
48
まだるっこしいので,ブルートフォースで計算する方が簡単である。
target = 74067
s = 0
for n = 1:999999 # 適当な数
a = 6n - 3
s += a
a == target && (println(s); break)
end
457197075