曜日の計算(day-of-the-week calculation)とは、日付から曜日を求める計算である。グレゴリオ暦(4 で割り切れる年は閏年、ただし 100 で割り切れて 400 で割り切れない年は平年)の日付で、1 月・2 月を前年の 13 月・14 月とみなし、年を $Y=100J+K$($0\le K\le99$)、月を $m$、日を $d$ とすると、$d+\lfloor\frac{13(m+1)}5\rfloor+K+\lfloor\frac K4\rfloor+\lfloor\frac J4\rfloor+5J$ を 7 で割った余り $0,\dots,6$ が土・日・月・火・水・木・金を表す(Zeller の公式)。閏年の個数をガウス記号で数えて導ける。400 年は $146097$ 日でちょうど $20871$ 週なので、暦は 400 年ごとに曜日まで同じにもどる。
前提知識: 合同式の計算規則, ガウス記号と整数の個数
「今日が月曜日なら 100 日後は何曜日か」は、100 を 7 で割った余りだけで答えが出る(合同式の計算規則 の最初の例)。曜日は 7 日ごとにくり返すので、日数を 7 で割った余りだけを見ればよいからである。この記事では、その先の問い「西暦の日付が与えられたら、それが何曜日かを式で求められるか」を考える。まず、知っている日付から日数を数えて曜日を求めてみる。
2026 年 1 月 1 日は木曜日である。2026 年 10 月 4 日は何曜日か。
1 月 1 日から 10 月 4 日までの日数を数える。1 月から 9 月までの日数は
$$
31+28+31+30+31+30+31+31+30=273
$$
で(2026 年は 4 で割り切れないので 2 月は 28 日)、10 月 1 日は 1 月 1 日の 273 日後である。10 月 4 日はさらに 3 日後なので、1 月 1 日の $276$ 日後である。
$$
276=7\cdot39+3
$$
なので、10 月 4 日は木曜日の 3 日後で、日曜日である。
2026 年 1 月 1 日が木曜日であることから、2027 年・2028 年・2029 年の 1 月 1 日の曜日を求める。
(1) 2026 年は 365 日で、$365=7\cdot52+1$ なので、1 年後の同じ日付は曜日が 1 つ進む。2027 年 1 月 1 日は金曜日である。
(2) 2027 年も 365 日なので、2028 年 1 月 1 日は土曜日である。
(3) 2028 年は 4 で割り切れるので閏年で、2 月 29 日がある。366 日で、$366=7\cdot52+2$ なので曜日が 2 つ進む。2029 年 1 月 1 日は月曜日である。
1 年たつと曜日は 1 つ進み、閏年をまたぐときだけ 2 つ進む。したがって、何年も先の曜日を求めるには「その間に閏年が何回あるか」を数えればよい。閏年の回数は、ガウス記号と整数の個数 で学んだ倍数の個数の数え方で求まる。この記事では次の問いに答える。
| 高校の計算 | この記事の言葉 | 大学の言葉 |
|---|---|---|
| 日数を 7 で割った余り | 曜日の番号 | 法 $7$ の剰余類 |
| 4 の倍数の年を数える | 閏年の個数 $\lfloor Y/4\rfloor-\lfloor Y/100\rfloor+\lfloor Y/400\rfloor$ | 包除原理と床関数 |
| 月の日数を足していく | 月の補正 $\left\lfloor\frac{13(m+1)}5\right\rfloor$ | 直線を整数に丸める |
| 400 年で同じ暦にもどる | 曜日の周期 | 周期関数・剰余の周期 |
この記事では、次の規則の暦(グレゴリオ暦)で書いた日付を考える。
(R1) 1 月から 12 月までの日数は、順に $31,\ 28,\ 31,\ 30,\ 31,\ 30,\ 31,\ 31,\ 30,\ 31,\ 30,\ 31$ 日である。ただし閏年の 2 月は 29 日である。
(R2) 西暦 $t$ 年が 閏年 であるのは、$t$ が 4 で割り切れて 100 で割り切れないとき、または $t$ が 400 で割り切れるときである。それ以外の年は 平年 である。
曜日には、土曜日から順に番号 $0,1,2,3,4,5,6$ をつける。
| 曜日 | 土 | 日 | 月 | 火 | 水 | 木 | 金 |
|---|---|---|---|---|---|---|---|
| 番号 | $0$ | $1$ | $2$ | $3$ | $4$ | $5$ | $6$ |
翌日の曜日の番号は、今日の番号に $1$ を足して $7$ で割った余りである(金曜日の番号 $6$ の翌日は $0$、土曜日)。
条件 (ii) により、2024 年・2028 年は閏年、2100 年・2200 年・2300 年は平年(100 で割り切れて 400 で割り切れない)、2000 年・2400 年は閏年である。この暦では、平年は $365$ 日、閏年は $366$ 日である。
曜日の番号を土曜日から始めるのは、あとで出てくる式が土曜日に $0$ を返す形になるからである。番号のつけ方を変えても、曜日を求める考え方は同じである。
閏日の 2 月 29 日は年の途中にあるので、1 月・2 月の日付と 3 月以降の日付とで、その年の閏日を数えるかどうかが変わってしまう。そこで、年の区切りを 3 月 1 日にずらす。
西暦 $y$ 年 $m_0$ 月 $d$ 日の日付に対して、数 $Y$ と $m$ を次で決める。
この数え直しでは、1 つの「年」が 3 月 1 日に始まり、翌年の 2 月の終わり(2 月 28 日か 29 日)で終わる。閏日はいつも「年」の最後の日になるので、3 月から翌年 1 月までの日付は閏年かどうかに影響されない。$m$ は $3$ から $14$ までの値をとる。
閏年の規則は「4 の倍数、ただし 100 の倍数は除き、400 の倍数は戻す」である。ガウス記号と整数の個数 の定理「倍数の個数」は、正の実数 $x$ と正の整数 $k$ について、$1$ 以上 $x$ 以下の整数のうち $k$ の倍数は $\lfloor x/k\rfloor$ 個ある、と述べている($\lfloor x\rfloor$ は $x$ 以下の最大の整数で、同記事の $[x]$ と同じもの)。これを 3 回使う。
正の整数 $Y$ について、西暦 1 年から西暦 $Y$ 年までの閏年の個数を $L(Y)$ とすると
$$
L(Y)=\left\lfloor\frac Y4\right\rfloor-\left\lfloor\frac Y{100}\right\rfloor+\left\lfloor\frac Y{400}\right\rfloor
$$
である。
方針:閏年の集まりを、4 の倍数・100 の倍数・400 の倍数の集まりで表し、個数を引き算と足し算で求める。
段 1(3 つの集まり)。$1$ 以上 $Y$ 以下の整数のうち、4 の倍数の集まりを $A$、100 の倍数の集まりを $B$、400 の倍数の集まりを $C$ とする。ガウス記号と整数の個数 の定理「倍数の個数」により、$A,B,C$ の個数はそれぞれ $\lfloor Y/4\rfloor$、$\lfloor Y/100\rfloor$、$\lfloor Y/400\rfloor$ である。400 の倍数は 100 の倍数であり、100 の倍数は 4 の倍数なので、$C$ は $B$ に含まれ、$B$ は $A$ に含まれる。
段 2(閏年の集まり)。def-dow-calendar の条件 (ii) により、閏年は「$A$ に入り $B$ に入らない年」と「$C$ に入る年」である。前者の集まりを $A\setminus B$ と書く。$C$ は $B$ に含まれるので、$C$ の年は $A\setminus B$ に入らない。したがって 2 つの集まりは重ならず、閏年の個数は「$A\setminus B$ の個数」と「$C$ の個数」の和である。
段 3(個数)。$B$ は $A$ に含まれるので、$A\setminus B$ の個数は $A$ の個数から $B$ の個数を引いたものである。よって
$$
L(Y)=\left(\left\lfloor\frac Y4\right\rfloor-\left\lfloor\frac Y{100}\right\rfloor\right)+\left\lfloor\frac Y{400}\right\rfloor
$$
である。$\square$
次に、def-dow-shift で数え直した年の中で、3 月 1 日から各月の 1 日までの日数を表にしておく。3 月 1 日から $m$ 月 1 日までの日数を $c(m)$ とする。$c(3)=0$ で、$c(m+1)$ は $c(m)$ に $m$ 月の日数を足したものである。
| $m$(月) | $3$(3 月) | $4$ | $5$ | $6$ | $7$ | $8$ | $9$ | $10$ | $11$ | $12$ | $13$(1 月) | $14$(2 月) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| その月の日数 | $31$ | $30$ | $31$ | $30$ | $31$ | $31$ | $30$ | $31$ | $30$ | $31$ | $31$ | $28$ か $29$ |
| $c(m)$ | $0$ | $31$ | $61$ | $92$ | $122$ | $153$ | $184$ | $214$ | $245$ | $275$ | $306$ | $337$ |
$c(m)$ を作るのに使うのは 3 月から翌年 1 月までの日数だけで、2 月の日数は使わない。だから $c(m)$ は閏年かどうかによらない。これが 1 月・2 月を前の年に回した理由である。
def-dow-shift の $Y,m$ と日 $d$ に対して
$$
G=365Y+L(Y)+c(m)+d
$$
とおく($Y\ge1$ とする)。日付 $Q$ が日付 $P$ の $n$ 日後なら、$Q$ の $G$ の値から $P$ の $G$ の値を引いたものは $n$ に等しい。
方針:$P$ から $Q$ までを「$P$ からその年の 3 月 1 日へもどる」「3 月 1 日から 3 月 1 日へ年ごとに進む」「3 月 1 日から $Q$ へ進む」の 3 つに分けて数える。$P$ の値を $Y_1,m_1,d_1$、$Q$ の値を $Y_2,m_2,d_2$ とする。
段 1(年の中の日数)。数え直した $Y$ 年の 3 月 1 日から $m$ 月 $d$ 日までの日数は、$m$ 月 1 日までの $c(m)$ 日と、$m$ 月 1 日から $d$ 日までの $d-1$ 日の和で、$c(m)+d-1$ 日である。
段 2(1 年分の日数)。数え直した $t$ 年の 3 月 1 日から $t+1$ 年の 3 月 1 日までには、3 月から 12 月までと、西暦 $t+1$ 年の 1 月・2 月が入る。2 月が 29 日になるのは西暦 $t+1$ 年が閏年のときだけなので、日数は $t+1$ 年が閏年なら $366$、平年なら $365$ である。一方、$L(t+1)-L(t)$ は「西暦 $t+1$ 年が閏年なら $1$、平年なら $0$」である($L$ は 1 年から数えた閏年の個数だから)。よって、この 1 年分の日数は
$$
365+L(t+1)-L(t)
$$
である。
段 3(何年分かの日数)。$Y_1\le Y_2$ とする($Q$ は $P$ より後なので、数え直した年も $Y_1\le Y_2$ である)。$Y_1$ 年の 3 月 1 日から $Y_2$ 年の 3 月 1 日までの日数は、段 2 の日数を $t=Y_1,Y_1+1,\dots,Y_2-1$ について足したもので
$$
\sum_{t=Y_1}^{Y_2-1}\bigl(365+L(t+1)-L(t)\bigr)=365(Y_2-Y_1)+L(Y_2)-L(Y_1)
$$
である($L(t+1)-L(t)$ の和は、隣どうしが打ち消し合って $L(Y_2)-L(Y_1)$ だけが残る)。$Y_1=Y_2$ のときは両辺とも $0$ である。
段 4(合わせる)。$P$ から $Q$ までの日数 $n$ は、「$Y_1$ 年の 3 月 1 日から $Q$ までの日数」から「$Y_1$ 年の 3 月 1 日から $P$ までの日数」を引いたものである。前者は段 3 と段 1 から $365(Y_2-Y_1)+L(Y_2)-L(Y_1)+c(m_2)+d_2-1$、後者は段 1 から $c(m_1)+d_1-1$ である。引き算すると
$$
n=\bigl(365Y_2+L(Y_2)+c(m_2)+d_2\bigr)-\bigl(365Y_1+L(Y_1)+c(m_1)+d_1\bigr)
$$
となり、右辺は $Q$ の $G$ から $P$ の $G$ を引いたものである。$\square$
2000 年 1 月 1 日は土曜日である。lem-dow-count で 2026 年 10 月 4 日の曜日を求める。
(1) 2000 年 1 月 1 日:$Y=1999$、$m=13$、$d=1$。$L(1999)=499-19+4=484$ なので
$$
G=365\cdot1999+484+306+1=729635+484+306+1=730426
$$
(2) 2026 年 10 月 4 日:$Y=2026$、$m=10$、$d=4$。ex-dow-leap より $L(2026)=491$ なので
$$
G=365\cdot2026+491+214+4=739490+491+214+4=740199
$$
(3) 差は $740199-730426=9773$ 日で、$9773=7\cdot1396+1$ である。2026 年 10 月 4 日は土曜日の 1 日後で、日曜日である。ex-dow-start-days の答えと一致する。
lem-dow-count から、曜日の番号は $G$ を 7 で割った余りで決まる。実際、$Q$ が $P$ の $n$ 日後なら曜日の番号は $n$ を 7 で割った余りだけ進み、$G$ の値もちょうど $n$ だけ増えるからである。残る仕事は、$G$ を 7 で割った余りを計算しやすい形にすることである。
$c(m)$ は表を引けば分かるが、式で書けると便利である。月の日数は 31 と 30 が不規則に並ぶので、$c(m)$ を直接きれいな式にするのは難しそうに見える。しかし、ほしいのは $c(m)$ そのものではなく、$c(m)$ を 7 で割った余りだけである。
$m=3,4,\dots,14$ について
$$
c(m)\equiv\left\lfloor\frac{13(m+1)}5\right\rfloor-3\pmod7
$$
である。
$m$ は 12 個の値しかとらないので、12 個すべてを調べれば証明になる。ただ、表を眺める前に、なぜ $\frac{13}5$ という数が出てくるのかを見ておく。$m$ が 1 増えると $\frac{13(m+1)}5$ は $\frac{13}5=2.6$ 増え、そのガウス記号は $2$ か $3$ 増える。一方、月の日数 $30,31$ を 7 で割った余りは $2,3$ である。この増え方がそろっていることが、証明の中心である。
方針:$f(m)=\left\lfloor\dfrac{13(m+1)}5\right\rfloor$ とおき、$m$ が 1 増えるときの $c(m)$ と $f(m)$ の増え方を比べる。
段 1($f$ の値)。$m=3,4,\dots,14$ について $\dfrac{13(m+1)}5$ とそのガウス記号 $f(m)$ を計算すると、次の表になる。
| $m$ | $3$ | $4$ | $5$ | $6$ | $7$ | $8$ | $9$ | $10$ | $11$ | $12$ | $13$ | $14$ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $\frac{13(m+1)}5$ | $10.4$ | $13$ | $15.6$ | $18.2$ | $20.8$ | $23.4$ | $26$ | $28.6$ | $31.2$ | $33.8$ | $36.4$ | $39$ |
| $f(m)$ | $10$ | $13$ | $15$ | $18$ | $20$ | $23$ | $26$ | $28$ | $31$ | $33$ | $36$ | $39$ |
| $f(m+1)-f(m)$ | $3$ | $2$ | $3$ | $2$ | $3$ | $3$ | $2$ | $3$ | $2$ | $3$ | $3$ | |
| $m$ 月の日数 | $31$ | $30$ | $31$ | $30$ | $31$ | $31$ | $30$ | $31$ | $30$ | $31$ | $31$ |
段 2(増え方の比較)。表の最後の 2 行を比べると、$m=3,4,\dots,13$ のどの $m$ でも
$$
(m\text{ 月の日数})-\bigl(f(m+1)-f(m)\bigr)=28
$$
である($31-3=28$、$30-2=28$)。$c(m+1)-c(m)$ は $m$ 月の日数なので、
$$
\bigl(c(m+1)-f(m+1)\bigr)-\bigl(c(m)-f(m)\bigr)=28
$$
となる。つまり $c(m)-f(m)$ は、$m$ が 1 増えるごとにちょうど $28$ ずつ増える。
段 3(7 で割った余り)。$m=3$ では $c(3)-f(3)=0-10=-10$ なので、段 2 から
$$
c(m)-f(m)=-10+28(m-3)
$$
である($m=3,4,\dots,14$)。$28$ は $7$ の倍数なので $c(m)-f(m)\equiv-10\equiv-3\pmod7$ であり、$c(m)\equiv f(m)-3\pmod7$ が成り立つ。$\square$
段 3 の等式 $c(m)=f(m)-10+28(m-3)$ は、合同式ではなく本当の等式である。たとえば $m=10$ では $28-10+28\cdot7=214$ で、$c(m)$ の表の $c(10)=214$ と一致する。
$c(m)$ と $f(m)$ を 7 で割った余りを並べると、次のようになる(図 1)。
| 月 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $c(m)$ を 7 で割った余り | $0$ | $3$ | $5$ | $1$ | $3$ | $6$ | $2$ | $4$ | $0$ | $2$ | $5$ | $1$ |
| $f(m)$ を 7 で割った余り | $3$ | $6$ | $1$ | $4$ | $6$ | $2$ | $5$ | $0$ | $3$ | $5$ | $1$ | $4$ |
どの列でも、下の段は上の段に $3$ を足して 7 で割った余りになっている(たとえば 5 月は $5+3=8\equiv1$)。
3 月から翌年 2 月までの各月について、3 月 1 日からその月の 1 日までの日数を 7 で割った余り(青)と、13(m+1)/5 のガウス記号を 7 で割った余り(赤)を並べた棒グラフ。どの月でも赤は青に 3 を足して 7 で割った余りになっている
グレゴリオ暦の日付 $y$ 年 $m_0$ 月 $d$ 日に対して、def-dow-shift のとおり $Y=100J+K$ と $m$ を決める($Y\ge1$ とする)。
$$
h=d+\left\lfloor\frac{13(m+1)}5\right\rfloor+K+\left\lfloor\frac K4\right\rfloor+\left\lfloor\frac J4\right\rfloor+5J
$$
とおくと、$h$ を 7 で割った余りが、その日の曜日の番号である($0$ が土曜日、$1$ が日曜日、…、$6$ が金曜日。def-dow-calendar)。
方針:lem-dow-count の $G$ を 7 で割った余りを、$J,K$ と lem-dow-month で書き直し、$h\equiv G+3\pmod7$ を示す。最後に、ある 1 日で曜日の番号と $h$ の余りが一致することを確かめる。
段 1($365Y$ の余り)。$365=7\cdot52+1$ なので $365\equiv1\pmod7$、$100=7\cdot14+2$ なので $100\equiv2\pmod7$ である。合同式の計算規則 の定理「和・差・積の合同」により
$$
365Y\equiv Y=100J+K\equiv2J+K\pmod7
$$
である。
段 2($L(Y)$ を $J,K$ で書く)。prop-dow-leap の 3 つのガウス記号を順に計算する。
段 4 で使った「2000 年 1 月 1 日が土曜日」は暦から読み取る事実で、式だけからは出てこない。式が教えるのは日付どうしの曜日の差であり、曜日の名前は 1 日の曜日で合わせる。
$Y=2026$、$m=9$、$d=27$、$J=20$、$K=26$ である。
$$
\left\lfloor\frac{13\cdot10}5\right\rfloor=26,\quad\left\lfloor\frac{26}4\right\rfloor=6,\quad\left\lfloor\frac{20}4\right\rfloor=5,\quad5J=100
$$
なので
$$
h=27+26+26+6+5+100=190=7\cdot27+1
$$
で、余りは $1$、日曜日である。ex-dow-start-days の 10 月 4 日(日曜日)の 1 週間前なので、確かに日曜日である。
2100 年 3 月 1 日:$Y=2100$、$m=3$、$J=21$、$K=0$。$h=1+10+0+0+5+105=121=7\cdot17+2$ で月曜日。2400 年 1 月 1 日:$Y=2399$、$m=13$、$J=23$、$K=99$。$h=1+36+99+24+5+115=280=7\cdot40$ で土曜日。1999 年 12 月 31 日:$Y=1999$、$m=12$、$J=19$、$K=99$。$h=31+33+99+24+4+95=286=7\cdot40+6$ で金曜日(2000 年 1 月 1 日の前日)。
thm-dow-zeller の式を見ると、$Y$ を変えたときに $h$ がどう変わるかが分かる。$Y$ に $400$ を足すと $J$ が $4$ 増え、$K$ は変わらない。
グレゴリオ暦では、400 年は $146097$ 日で、これはちょうど $20871$ 週である。したがって、どの日付についても、その 400 年後の同じ月・同じ日は同じ曜日である。
段 1(日付があること)。400 は 4 でも 100 でも 400 でも割り切れるので、def-dow-calendar の条件 (ii) により、西暦 $t$ 年と $t+400$ 年は、両方とも閏年か両方とも平年である。だから、ある日付の 400 年後の同じ月・同じ日も存在する(2 月 29 日についても)。
段 2(日数)。数え直した $Y$ 年の 3 月 1 日から $Y+400$ 年の 3 月 1 日までの日数は、lem-dow-count の証明の段 3 から $365\cdot400+L(Y+400)-L(Y)$ である。prop-dow-leap の式で、$\left\lfloor\dfrac{Y+400}4\right\rfloor=\left\lfloor\dfrac Y4\right\rfloor+100$、$\left\lfloor\dfrac{Y+400}{100}\right\rfloor=\left\lfloor\dfrac Y{100}\right\rfloor+4$、$\left\lfloor\dfrac{Y+400}{400}\right\rfloor=\left\lfloor\dfrac Y{400}\right\rfloor+1$ なので(整数を足してもガウス記号の外に出せる)、$L(Y+400)-L(Y)=100-4+1=97$ である。よって日数は
$$
365\cdot400+97=146000+97=146097=7\cdot20871
$$
である。
段 3(曜日)。ある日付と、その 400 年後の同じ月・同じ日とは、$m$ と $d$ が同じで $Y$ が 400 違う。lem-dow-count より、その間の日数は 2 つの $G$ の差 $365\cdot400+L(Y+400)-L(Y)=146097$ で、7 の倍数である。よって曜日は同じである。$\square$
段 3 は thm-dow-zeller の式からも確かめられる。$J$ を $J+4$ にすると $\left\lfloor\frac J4\right\rfloor$ は $1$、$5J$ は $20$ 増えるので、$h$ は $21$ 増え、7 で割った余りは変わらない。
400 年ごとに同じ暦がくり返すので、「13 日が何曜日になりやすいか」は 400 年分を数えれば決まる。その前に、どの年にも必ずあることを 1 つ示しておく。
グレゴリオ暦のどの年にも、13 日が金曜日である月がある。もっと強く、その年の 3 月から 12 月までの 10 回の 13 日には、7 つの曜日がすべて現れる。
方針:同じ年の 3 月から 12 月までは $Y,J,K$ が共通なので、13 日の $h$ の違いは $\left\lfloor\frac{13(m+1)}5\right\rfloor$ の違いだけである。
西暦 $y$ 年の $m=3,4,\dots,12$ 月の 13 日では、def-dow-shift により $Y=y$ で、$J,K$ は月によらない。thm-dow-zeller の式は
$$
h=\left\lfloor\frac{13(m+1)}5\right\rfloor+\underbrace{13+K+\left\lfloor\frac K4\right\rfloor+\left\lfloor\frac J4\right\rfloor+5J}_{\text{月によらない数 }s}
$$
となる。ex-dow-month の表から、$m=3,\dots,12$ の $\left\lfloor\frac{13(m+1)}5\right\rfloor$ を 7 で割った余りは $3,6,1,4,6,2,5,0,3,5$ で、$0$ から $6$ までのすべてが現れる。これらに同じ数 $s$ を足して 7 で割った余りをとると、異なる余りは異なる余りに移る($a+s\equiv b+s$ なら $a\equiv b$)ので、やはり $0$ から $6$ までのすべてが現れる。したがって 13 日の曜日として 7 つの曜日がすべて現れ、特に金曜日(番号 $6$)も現れる。$\square$
2026 年の 3 月から 12 月では $J=20$、$K=26$ なので、$s=13+26+6+5+100=150=7\cdot21+3$、つまり $s\equiv3$ である。13 日が金曜日(番号 $6$)になるのは、$\left\lfloor\frac{13(m+1)}5\right\rfloor\equiv6-3=3\pmod7$ となる月で、ex-dow-month の表から $m=3$ と $m=11$、つまり 3 月と 11 月である。
2 月 13 日は数え直すと 2025 年の 14 月で、$J=20$、$K=25$ から $h=13+39+25+6+5+100=188=7\cdot26+6$ となり、これも金曜日である。2026 年には 13 日の金曜日が 2 月・3 月・11 月の 3 回ある。
最後に、400 年分の 4800 個の 13 日の曜日を数えた結果を表にしておく。これは thm-dow-zeller の式で 4800 個の日付を計算して数えた結果であり、手で証明したものではない(計算で確かめた)。cor-dow-400 により、どの年から数え始めても連続する 400 年なら同じ結果になる。
| 曜日 | 日 | 月 | 火 | 水 | 木 | 金 | 土 | 計 |
|---|---|---|---|---|---|---|---|---|
| 13 日がその曜日になる回数 | $687$ | $685$ | $685$ | $687$ | $684$ | $688$ | $684$ | $4800$ |
13 日が最も多くなる曜日は金曜日で、688 回である。$4800\mathbin{÷}7\approx685.7$ なので、7 つの曜日はほぼ同じ回数だが、ちょうど同じではない。$4800$ が $7$ で割り切れない以上、すべての曜日が同じ回数になることはありえない。
400 年間の 4800 個の 13 日について、曜日ごとの回数を表した棒グラフ。金曜日が 688 回で最も多い。縦軸は 680 から始まっている
thm-dow-zeller の式は、閏年の規則・1 月と 2 月の数え直し・ガウス記号の 3 つに合わせて作られている。どれかを変えると、式は正しい曜日を返さなくなる。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 閏年の規則の「100 で割り切れて 400 で割り切れない年は平年」を外し、4 の倍数の年をすべて閏年として数える | 2100 年 3 月 1 日(ex-dow-cx-leap) | 2000 年 1 月 1 日で合わせても、2100 年 3 月 1 日以降で 1 日ずれる。1900 年 2 月 28 日以前でも逆向きに 1 日ずれる |
| 1 月・2 月を前の年に回さない(def-dow-shift を使わず $Y=y$、$m=m_0$ とする) | 2024 年 1 月 1 日(ex-dow-cx-shift) | 1 月・2 月の日付で曜日がずれる。月の補正と閏年の数え方の両方が狂う |
| $\left\lfloor\frac{13(m+1)}5\right\rfloor$ のガウス記号を四捨五入に替える | 2026 年 5 月 1 日(ex-dow-cx-round) | 5 月・7 月・10 月・12 月で 1 日ずれる |
4 の倍数の年をすべて閏年とする規則では、1 年から $Y$ 年までの閏年の個数は $\lfloor Y/4\rfloor$ になる。lem-dow-count の $L(Y)$ をこれに替えた $G'=365Y+\lfloor Y/4\rfloor+c(m)+d$ を考え、2000 年 1 月 1 日(土曜日)で曜日を合わせる。
(1) 2000 年 1 月 1 日から 2100 年 2 月 28 日までは、その間の閏日(2004 年、…、2096 年の 2 月 29 日)がどちらの規則でも同じなので、$G'$ の差は本当の日数と一致し、曜日も正しい。
(2) 2100 年 3 月 1 日は本当は月曜日である(thm-dow-zeller の後の「ほかの日付の例」)。しかし $G'$ は、存在しない 2100 年 2 月 29 日を 1 日として数えてしまうので、差が本当の日数より 1 大きくなり、火曜日を返す。
(3) 逆向きでは、1900 年 2 月 28 日は本当は水曜日だが、$G'$ は存在しない 1900 年 2 月 29 日を数えるので、2000 年 1 月 1 日までの日数を 1 多く見積もり、火曜日を返す。
400 年に 3 回の例外を無視すると、100 年に 1 日ほどずつずれていく。
2024 年 1 月 1 日に、数え直しをせず $Y=2024$、$m=1$、$J=20$、$K=24$ として式に入れると
$$
1+\left\lfloor\frac{13\cdot2}5\right\rfloor+24+\left\lfloor\frac{24}4\right\rfloor+5+100=1+5+24+6+5+100=141=7\cdot20+1
$$
で、日曜日になる。本当は月曜日である(正しく $Y=2023$、$m=13$ とすると $h=1+36+23+5+5+100=170=7\cdot24+2$)。
ずれの理由は 2 つある。1 つは、$m=1$ の月の補正 $\lfloor26/5\rfloor=5$ が、3 月から数えた日数の表(lem-dow-month)と合っていないことである。もう 1 つは、$Y=2024$ とすると、まだ来ていない 2024 年 2 月 29 日まで閏日として数えてしまうことである。2024 年 3 月 1 日のように 3 月以降の日付では、数え直しをしなくても $Y,m$ は同じなので、正しい曜日(金曜日)が出る。
$\frac{13(m+1)}5$ を四捨五入すると、小数部分が $0.6$ や $0.8$ の月で $1$ 大きくなる。lem-dow-month の段 1 の表で、$m=5$($15.6$)、$m=7$($20.8$)、$m=10$($28.6$)、$m=12$($33.8$)がそれにあたる。
2026 年 5 月 1 日では、正しくは $h=1+15+26+6+5+100=153=7\cdot21+6$ で金曜日である。四捨五入した $16$ を使うと $154=7\cdot22$ で土曜日になり、1 日ずれる。
また、ガウス記号を外して $\frac{13(m+1)}5$ や $\frac K4$ をそのまま足すと、2026 年 10 月 4 日では $\frac{143}5+\frac{26}4$ のように整数でない数が出て、7 で割った余りが意味をもたない。
lem-dow-month の段 3 の等式 $c(m)=f(m)-10+28(m-3)$ を書き直すと
$$
c(m)=\left\lfloor\frac{153(m-3)+2}5\right\rfloor=\bigl\lfloor30.6(m-3)+0.4\bigr\rfloor\qquad(m=3,4,\dots,14)
$$
となる($28(m-3)$ は整数なのでガウス記号の中に入れられ、$\frac{13(m+1)}5-10+28(m-3)=\frac{153(m-3)+2}5$ である)。つまり、3 月 1 日から各月 1 日までの日数は、傾き $30.6$ の直線の値の整数部分になっている(図 3)。3 月から 7 月までの 5 か月は $31+30+31+30+31=153$ 日で、1 か月の平均は $153\mathbin{÷}5=30.6$ 日である。8 月から 12 月の 5 か月も同じ並び(31, 30, 31, 30, 31)で 153 日なので、同じ直線に乗る。
3 月 1 日から各月 1 日までの日数(点)と、直線 y = 30.6(m − 3) + 0.4(破線)。どの月でも点は直線のすぐ下にあり、直線の値の整数部分になっている
$\lfloor\alpha n+\beta\rfloor$ の形の数列は、傾き $\alpha$ の直線の下にある格子点の高さで、隣どうしの差は $\lfloor\alpha\rfloor$ か $\lfloor\alpha\rfloor+1$ のどちらかになる($\alpha=30.6$ なら 30 か 31)。差が $\lfloor\alpha\rfloor+1$ になる位置は、直線が整数の高さをまたぐ位置である。月の日数の 30 と 31 の並びがちょうどこの形になっていることが、1 つの式で月の補正を書ける理由である。ガウス記号で整数を数える考え方は ガウス記号と整数の個数 で扱う。
曜日を「日付の番号を 7 で割った余り」と見ることは、日付の番号を法 $7$ の剰余類に送る写像を考えることにあたる。cor-dow-400 は、その写像が「年に 400 を足す」操作で変わらないことを述べている。
2026 年のカレンダー(1 月 1 日が木曜日の平年)と、すべての日付の曜日が一致する次の年を求めよ。
すべての日付の曜日が一致するのは、1 月 1 日の曜日が同じで、閏年かどうかも同じ年である。1 月 1 日の曜日は、平年の後で 1 つ、閏年の後で 2 つ進む(ex-dow-start-years)。2027 年 金、2028 年 土(閏年)、2029 年 月、2030 年 火、2031 年 水、2032 年 木(閏年なので不適)、2033 年 土、2034 年 日、2035 年 月、2036 年 火(閏年)、2037 年 木。2037 年は平年で 1 月 1 日が木曜日なので、答えは 2037 年である。thm-dow-zeller で 2037 年 1 月 1 日($Y=2036$、$m=13$、$J=20$、$K=36$)を計算すると $h=1+36+36+9+5+100=187=7\cdot26+5$ で木曜日になり、確かめられる。
どの年でも、3 月 13 日と 11 月 13 日は同じ曜日であることを示せ。
同じ年の 3 月 13 日と 11 月 13 日は、def-dow-shift で $Y$ が同じで、$m$ が $3$ と $11$ である。lem-dow-count より、その間の日数は $c(11)-c(3)=245-0=245=7\cdot35$ で、7 の倍数である。よって同じ曜日である。ex-dow-month の表で、3 月と 11 月の $c(m)$ の余りがどちらも $0$ であることからも分かる。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する