算額(その1453)
福島県三春町 田村大元神社 文政12年(1829)
令和5年(2023)2月田村高校生徒により復元
http://www.wasan.jp/fukusima/tamuradaigen2.html
街角の数学 Street Wasan ~落書き帳「○△□」~ 257.花見の座興
http://streetwasan.web.fc2.com/math17.4.25.html
キーワード:中国剰余定理
#Julia, #SymPy, #算額, #和算
満開の桜の下で,発句詩歌の会が花見をしている。咲き誇る花数を文字数に見なして,これを17文字で区切れば3文字余り,七言絶句28文字で区切れば 23 文字不足し(=5文字余り),歌31文字で区切れば8文字余る,と話している。 さて,会員たちは桜の花数を何個と見たてたのだろう。
中国剰余定理を使えば一発で答えが出る。
Julia の SymPy の元は Python の sympy である。crt はインポートされていないので,明示的に sympy.ntheory.modular.crt として呼び出す。
using SymPy
#from sympy.ntheory.modular import crt
# 剰余の条件
moduli = [17, 28, 31] # 除数のセット
remainders = [3, 5, 8] # 剰余のセット
# 中国剰余定理を使用して解を求める
solution = sympy.ntheory.modular.crt(moduli, remainders) # 最小解と周期が返される
(7789, 14756)
花の数は 7789 個である。
検算で正しい解であることがわかる。
mod.(7789, moduli) |> println
[3, 5, 8]
ブルートフォースでやってみる。1 ミリ秒で計算できた。
@time begin
for n = 1:1000000000
all(mod.(n, [17, 28, 31]) .== [3, 5, 8]) && (println(n); break)
end
end
7789
0.015988 seconds (68.58 k allocations: 2.803 MiB, 94.85% compilation time)