算額(その1457)
福島県耶麻郡猪苗代町中小松西浜 猪苗代小平潟天満宮 明治14年(1881)
http://www.wasan.jp/fukusima/kohiragata3.html
街角の数学 Street Wasan ~落書き帳「○△□」~ 329.小平潟天満宮(その2)
http://streetwasan.web.fc2.com/math17.11.1.html
キーワード:中国剰余定理
#Julia, #SymPy, #算額, #和算
今神前で子供が字を書いている。毎日書く総字数 M は決まっている。
初日は,紙一枚毎に3字ずつ書いていくと,最後に2字余った。
次の日は,紙一枚毎に5字ずつ書いていくと,4字余った。
三日目は,紙一枚毎に7字ずつ書いていくと,6字余った。
さらに四日目最終日は,11字ずつ書いたら10字余ったという。
一日に書く総字数 M を求めよ。
中国剰余定理を使えば一発で答えが出る。
Julia の SymPy の元は Python の sympy である。crt はインポートされていないので,明示的に sympy.ntheory.modular.crt として呼び出す。
using SymPy
#from sympy.ntheory.modular import crt
# 剰余の条件
moduli = [3, 5, 7, 11] # 除数のセット
remainders = [2, 4, 6, 10] # 剰余のセット
# 中国剰余定理を使用して解を求める
solution = sympy.ntheory.modular.crt(moduli, remainders) # 最小解と周期が返される
(1154, 1155)
文字の数は 1154 文字である。
検算で正しい解であることがわかる。
mod.(1154, moduli) |> println
[2, 4, 6, 10]
ブルートフォースでやってみる。16 ミリ秒で計算できた。
@time begin
for n = 1:1000000000
all(mod.(n, [3, 5, 7, 11]) .== [2, 4, 6, 10]) && (println(n); break)
end
end
1154
0.014902 seconds (22.13 k allocations: 1.218 MiB, 97.79% compilation time)