ツェラーの公式
このページではツェラーの公式について一通り考察した後に、よりシンプルな公式を導く
$ h=d+\lfloor2.6(m+1)\rfloor+Y_{100}+\left\lfloor\frac{Y_{100}}{4}\right\rfloor-2C+\left\lfloor\frac{C}{4}\right\rfloor\mod 7
$ d: 日付
$ m: 月。ただし 1月 2月 は前年の 13月 14月
閏日を最後に持って来たいため
$ Y_{100}: 年の下 2 桁
$ C: 世紀
日付から曜日を導く式
h=0 から順に 土, 日, 月, 火, 水, 木, 金
単純な部分
日付が 1 増えるごとに曜日が 1 増えるので$ +d
年が 1 増えるごとに曜日が 1 増えるので $ +Y_{100}
$ 365\ {\rm mod}\ 7=1のため
4 年に 1 回、閏年により1日増えるので$ +\left\lfloor\frac{Y_{100}}{4}\right\rfloor
$ -2Cの謎
1. $ Y_{100}関連は 100年 のときには$ 100+25=125\equiv6\ {\rm mod}\ 7となってほしいが
実際は$ Y_{100}が西暦の下 2 桁を表すため、$ 0に戻る
このため、$ 1引いて$ 6にしている
2. 閏年が 100 年に一度、来ないので更に$ 1引く
よって$ -2C
400 年に 1 回、閏年により1日増えるので$ +\left\lfloor\frac{C}{4}\right\rfloor
月に関する部分の深掘り
月は一見ランダムに日数が変わるように見える
それを何故か $ \left\lfloor2.6(m+1)\right\rfloor\ \rm mod7とまとめている。すげえ
5月ごとに1周する日数
3-7月、8-12月にかけて月が 31-30-31-30-31 となる。
mod 7 でみると 3-2-3-2-3 で平均 2.6 ずつ増える
table: 月
月 日数 mod7 2.6*(m+1) ...mod7 下との差分
3 31 3 10.4 3.4 6-3=3
4 30 2 13.0 6.0 1-6=2
5 31 3 15.6 1.6 4-1=3
6 30 2 18.2 4.2 6-4=2
7 31 3 20.8 6.8 2-6=3
ー ー ー ー ー ー
8 31 3 23.4 2.4 5-2=3
9 30 2 26.0 5.0 0-5=2
10 31 3 28.6 0.6 3-0=3
11 30 2 31.2 3.2 5-3=2
12 31 3 33.8 5.8 1-5=3
ー ー ー ー ー ー
13 31 3 36.4 1.4 4-1=3
14 28 0 39.0 4.0
よりシンプルなバージョン
$ Cに起因する面倒くさい部分を取り除こう
$ h=d+\lfloor2.6(m+1)\rfloor+Y_{400}+\left\lfloor\frac{Y_{400}}{4}\right\rfloor-\left\lfloor\frac{Y_{400}}{100}\right\rfloor\mod 7
$ Y_{400}関連の部分はゴチャゴチャして見えるが閏年のルールを覚えていれば、閏年を再現しているだけだと分かる $ h=d+\lfloor2.6(m+1)\rfloor+Y_{100}+\left\lfloor\frac{Y_{100}}{4}\right\rfloor-C+5\mod 7
$ Y_{100}は西暦を 100 で割ったあまり
しかし、シンプルバージョンを使うと見通しが良くなる
$ h=d+\lfloor2.6(m+1)\rfloor+Y_{400}+\left\lfloor\frac{Y_{400}}{4}\right\rfloor-\left\lfloor\frac{Y_{400}}{100}\right\rfloor+5\mod 7
$ Y_{400}が西暦を400で割った余りとして考えるのはユリウス暦目線では不自然だが、グレゴリウス暦に親しんでいる我々にとっての暗記効率は良い