6 : 14 曜日計算

← 6‒13 p↑ もくじ i 6‒15 n →

公式不要の明快な曜日計算

2016年10月23日
記事ID e61023

公式や表を使わず、何も覚えていない状態で、手軽に任意の年月日の曜日を暗算。

前提

ユリウス暦では、4で割り切れる年は常にうるう年。

グレゴリオ暦(現在の普通の暦)もだいたい同じだが、100の倍数の年だけは特別ルール: 400で割り切れればうるう年、そうでなければ平年。例えば、2000年には2月29日があるが、1900年や2100年の2月は28日まで。

ユリウス暦では、1世紀につき、うるう年が25回入る。グレゴリオ暦では、うるう年が25回入るとき(ユリウス世紀)と、24回のとき(短い世紀)があり、400年ごとに前者が1回、後者が3回。

以下の三つは、落ち着いて考えればどれも当たり前のことであり、一度仕組みを理解すれば、無理に記憶しなくても、いつでも頭の中で再構成できる。

基礎1

平年の1年(365日)ごとに、曜日は1個前進。例えば、ある年の5月5日が日曜日なら、翌年の5月5日は月曜日。

理由は、365 を 7 で割ると 1余るから。このことは覚えていなくても、365 = 350 + 15 ≡ 14 + 1 ≡ 1 (mod 7) と、その場で暗算できる(7の倍数は無視していい)。

同様に、うるう年の1年(366日)なら、曜日は2個前進。

基礎2

4年を1周期とすると、平年3+うるう年1の通常の1周期では、曜日は2個後退。

理由は、基礎1から、1 + 1 + 1 + 2 = 5 ≡ −2 (mod 7)

通常の7周期(28年)では曜日の後退は (−2) × 7 ≡ 0 (mod 7) であり、曜日が元に戻る。

グレゴリオ暦には、まれに通常ではない周期(4年連続平年)もある。しかし「XX00年2月末日」をまたぐ曜日計算をしない限り、そのことは問題にならない(以下では、またがないように切り分けるので問題なし)。

基礎3

1ユリウス世紀(通常の周期25回)では、曜日は1個後退。

理由は、基礎2から、(−2) × 25 = −50 = −49 − 1 ≡ −1 (mod 7)

短い世紀では、1日少ないので、曜日は2個後退。

グレゴリオ暦の4世紀では、(−1) + (−2) + (−2) + (−2) = −7 ≡ 0 (mod 7) なので、曜日が元に戻る。つまり、400年ごとに曜日パターンは循環。

[計算の前半] 3月1日の曜日

最初に3月1日の曜日を考える。任意の年の3月1日の曜日が分かれば、任意の日付の曜日は簡単に分かる(「計算の後半」参照)。

「原点」として、2000年3月1日は水曜日。覚え方は、「ミレニアムで浮かれて商売が儲かった」または「21世紀は瓶座の時代」。もし原点の曜日を忘れてしまっても、今日の日付と曜日が分かれば、以下の4ステップを逆順に適用することにより、基準の曜日をその場で求めることができる。

ステップ1

基礎3から、+100年ごとに、ユリウス世紀なら曜日は1個後退し、長い世紀なら曜日は2個後退する(−100年なら、それぞれ1個・2個前進)。

よって1900・2000・2100・2200年の3月1日は、それぞれ木・・月・土曜日。それを基準日とする。(この範囲外の年についても、400の倍数を加減すればこの範囲に帰着できる。)

ステップ2

直前の ’00年3月1日からの経過年数を Y とすると、基礎2から、Y を「Y を28で割った余り y」で置き換えて構わない。例えば、2050年3月1日は、2022年3月1日と同じ(Y = 50, y = 22)。

実際上は、28・56・84のどれかを適宜引き算すればいい。

y を4で割って商を q、余りを r とすると、基準日との曜日の違いは、−2q + r。第1項は基礎2、第2項は基礎1による。

例えば y = 22 なら5周期と2年なので、(−2) × 5 + 2 = −8 ≡ −1。2000年3月1日(基準日)は水曜なので、2050年3月1日は火曜日と分かる。

[計算の後半] 3月以外の1日の曜日

ステップ3

直前の3月1日からの経過月数を M とする。31 = 28 + 3 ≡ 3 なので、大の月が1個経過するごとに曜日が3個前進する。小の月(月の日数が30)なら、曜日の前進量はそれより1小さい。よって、3月1日との曜日差は 3M − N。ここで、N は「小の月が何回挟まったか?」で、期間に含まれる「4・6・9・11月30日」の回数。例えば8月1日を考えると M = 8 − 3 = 5, N = 23 × 5 − 2 = 13 ≡ −1 なので、3月1日と比べて曜日は1個後退。例えば、2050年3月1日(火曜日)を基準として、2050年8月1日は月曜日と分かる。

3月1日を基準としているので、最長で翌年2月1日までの11カ月を考えれば足り、2月が何日あるかを考える必要はない。

1月1日・2月1日に関しては、前年3月1日からの経過月数を考える点に注意(下記例題参照)。

ステップ4

最後に、1日以外の曜日については、単に1日からの経過日数分、曜日を前進させればいい。

以上により、グレゴリオ暦の任意の日付の曜日が簡単に求められる。

公式めいたものも記したが、どれも原理を考えれば単純明快なことであり、無理に公式を暗記しなくても、その場で容易に生成できる。ただし、何月が小の月かは既に知っているものとする!

例題

以下の例では、説明を具体的にするために、途中計算の曜日も記してある。実際には、’XX年3月1日の曜日を求めずに、’00年3月1日との曜日差だけを通算しても構わない。

2345年6月7日

基礎3より1945年と同じ。基礎2より、それは1917年と同じ。

1900年3月1日は木曜日。1916年3月1日は4周期後なので、曜日差は (−2) × 4 ≡ −1、1917年3月1日は、それプラス1で木曜日のまま。

3月1日と6月1日との曜日差は (+3) × 3 − 1 ≡ 1、6月1日と6月7日の曜日差は 7 − 1 = 6、合わせて 7 ≡ 0 なので、結局、木曜日のまま。

2222年2月22日

2200年3月1日は土曜日。

2220年3月1日は5周期後なので、曜日差は (−2) × 5 ≡ −3、2221年3月1日はそれプラス1なので木曜日。

そこから2222年2月1日までの曜日差は (+3) × 11 − 4 ≡ 1、2月1日と2月22日の曜日差は 21 ≡ 0、合わせて +1 なので、答えは金曜日。

9999年9月9日

8000を引いて1999年9月9日と同じ。

1999年は84を引いた1915年と同じ。

1900年3月1日は木曜日。そこから1912年3月1日までの曜日差は、(−2) × 3 ≡ −6、そこから1915年3月1日までの曜日差は +3、合わせて月曜日。

3月1日から9月1日までの曜日差は (+3) × 6 − 2 ≡ 2、そこから9月9日までの曜日差は 8 ≡ 1、合わせて木曜日。

(別解) 2000年3月1日は水曜日。1999年3月1日は366日前なので月曜日(基礎1のリバース)。以下同じ。

結び

もう少しだけ複雑でトリッキーな方法を使うと、任意の日付の曜日を数秒以内に言えるようになる。それに比べると上述の方法は少し時間がかかるが、その分、アルゴリズムが単純明快で、ほとんど何も覚える必要がない(メモリー消費量が小さい)。この方法でも、ゆっくり考えて数分以内、慣れれば10秒くらいで曜日が分かるだろう。ある意味、トリッキーな速算より素直で良い。

上記の手順はグレゴリオ暦専用だが、少し変えるだけでユリウス暦にも対応できる。

この計算法は、もともと別の話題(グレゴリオ暦での曜日の分布)の土台として考えたものだが、それ自体としても実用性がありそうなので、独立した記事とした。

この記事のURL

パブリックドメイン


13日は金曜になりやすく31日は水曜になりにくい

2017年 9月 3日
記事ID e70903

曜日は「日月火水木金土」の繰り返しだから、各曜日の頻度はもちろん均等! …のような気がするが、現実は奇妙なもの。「毎月1日の曜日」「13日の曜日」のように「特定の日にちが何曜になるか」を考えると、現在の暦(グレゴリオ暦)では曜日分布に偏りがある。原因は:

  1. グレゴリオ暦では、400年につき97回うるう年がある。だから400年の日数は 365 × 400 + 97。これは7の倍数だから、全ての日は、その400年後の日と曜日が同じ。
  2. 「○月1日」という日付は、1年に12回。400年では 12 × 400 = 4800 回。
  3. 「毎月1日の曜日」は400年 = 4800回を周期に同じパターンの繰り返し。4800は7で割り切れないから、周期ごとに「7種の曜日が同じ数」ということは不可能!

「1~28日」のどの日付についても、そうなる。「29~31日」については別に考える必要があるが、結論から言うと、グレゴリオ暦ではどの日付も曜日が不均等。13日・金曜日は400年につき688回も発生し、迷信深い人を震え上がらせる。対照的に、13日・土曜日は684回しかない。30日・月曜日は631回あるが、30日・火曜日は626回。

トータル回数が7で割り切れない以上、正確に7等分できないのは仕方ないとして、多い曜日・少ない曜日で4~5回も差があるというのは、一体どういう現象だろう?

§1 1年間の曜日の分布

様子を見るために、1年分だけを取り出して考えてみよう。

問題1 2017年1月1日は、日曜である。2017年の1年間における、毎月1日の曜日の分布はどうなるか。


問: 「1月1日が日曜のとき、同じ年の2月1日は何曜?」

答: 1月は31日あるから、1月1日→2月1日で曜日は31個前進。「7の倍数の日数差」は曜日に影響しないので、計算上、31を「7で割った余り」の 3 で置き換えて構わない(31から「7の倍数28」を引き算)。つまり、曜日が31個前進することは、曜日が3個前進することと同じ意味。1月1日が日曜なら、2月1日の曜日はその3個先=水曜。

2017年カレンダー(JPEG画像, 22 KiB)

同様に考えると、「ある月の1日の曜日」を基準にした場合、その月の日数が30か31かに応じて「翌月の1日の曜日」は2または3前進する。ただし、その月が2月の場合には、月の日数が28か29かに応じて、0または1前進する(「0前進」の場合、2月1日と3月1日が同じ曜日)。

日曜日を「0」、月曜日を「1」…とすると、問題1の分布はこうなる:

表1: 曜日番号の定義
曜日
曜日番号 0 1 2 3 4 5 6
表2: 1月1日の曜日が「0」の平年における毎月1日の曜日
1 2 3 4 5 6 7 8 9 10 11 12
日数 (A) 31 28 31 30 31 30 31 31 30 31 30 (31)
A÷7の余り (B) 3 0 3 2 3 2 3 3 2 3 2 (3)
「1日」の曜日 (C) 0 3 3 6 1* 4 6 2* 5 0* 3 5

A欄は、各月の日数。B欄は、それを7で割った余りで、Aマイナス28に等しい。この値は、「その月の1日→翌月1日で、曜日が何個前進するか」を表している。C欄の初期値は「0」で、これは「1月1日が日曜」という仮定を表す。2月以降のC欄は「前月の1日の曜日番号 + 前月のB欄」つまり前月の「B + C」。曜日番号なので、7以上になったら7を引く(例えば、曜日番号8は曜日番号1と同じ意味)。アスタリスクの場所で、この「7を引く処理」が行われている。

12月のA欄・B欄の丸括弧内の値は、ここでは必要ない(翌1月のC欄の計算に必要なデータだが、それは計算範囲外なので)。

さて、C欄全体を見ると「0」(日曜)が2回現れ、1月1日と10月1日が日曜になることが分かる。

「1」(月曜)は1回しかない(5月1日)。

各曜日について一覧表にすると:

結論として、1月1日が日曜の平年では、その年の各月1日の「日・月・火・水・木・金・土の回数」は、それぞれ 2・1・1・3・1・2・2 となる。これを

…と書き表すことにする(左端の成分が、日曜日の回数)。


ところで a1 は「毎月1日」についてのデータだが、それと曜日が等しい「毎月8日」なども同じことになる。また例えば「毎月2日」なら、「毎月1日」と比べ曜日が全部1個ずつ進んで、

…となるのだから、曜日の頻度は次のように書ける(左端の成分が、日曜日の回数)。

a1 から a2 を得るには、成分を1個ずつ右にずらして、右端の 2 を左端に移せばいい。

2  1  1  3  1  2  2      もともとの状態(a1)
   2  1  1  3  1  2  2   右に一個ずつずらした
                     ¦
<----<----<----<------
¦
2  2  1  1  3  1  2      はみ出た成分を左端にワープさせる(a2)

実際、「1日が日曜である回数」と「2日が月曜である回数」は等しいから、a1 の左端の成分と a2 の左から2個目の成分は同じ値。他の曜日についても同様。「成分を右に1個ずつずらす。ただし、右端の成分は左端にワープさせる」というこの処理をリングシフトと名付け、σ で表すことにすると:

同じ年における「毎月2日の曜日分布」「毎月3日の曜日分布」「毎月4日の曜日分布」…は、それぞれ a1 に対して1・2・3…回リングシフトを行ったものに等しい。

§2 4年間の曜日の分布

もう少しだけ長い期間を考えてみよう。

問題2 2017年1月1日は、日曜である。2017~2020年の4年間に48回ある「毎月1日」の曜日の分布はどうなるか。


2017年の分については、問題1において a1 = (2, 1, 1, 3, 1, 2, 2) という統計を得た。2017年は365日あり、365を7で割ると1余るのだから、翌2018年には、全部の日付について、2017年と比べて曜日が1個ずつ前進する。例えば、2018年1月1日は月曜。そうすると、2017年の日付で日曜だった場所は全部月曜になり、月曜だった場所は全部火曜になり、以下同様なので、2018年の毎月1日の曜日分布は、

に等しい。実際、2018年には:

同様に、2019年の統計は:

もし2020年も平年だったら、2020年の統計は、単純に

となって、これらの和 D が問題2の解となっていた(和は、成分ごとに足したもの)。

a1 = (2, 1, 1, 3, 1, 2, 2)
a2 = (2, 2, 1, 1, 3, 1, 2) = σ(a1)
a3 = (2, 2, 2, 1, 1, 3, 1) = σ(a2)
a4 = (1, 2, 2, 2, 1, 1, 3) = σ(a3)
D  = (7, 7, 6, 7, 6, 7, 8) ← 上の4行を成分ごとに足し算   D = a1 + a2 + a3 + a4

この D = (7, 7, 6, 7, 6, 7, 8) は、「日曜から始まる平年・平年・平年・平年」という4年間における、毎月1日の曜日分布を表している。


現実には2020年は うるう年なので、上記のやり方では計算が合わない。「平年・平年・平年・うるう年」というパターンを考慮して、4年目の統計 a4 を「うるう年バージョン」の統計 x に置き換える必要がある。統計 x を得るために、ここでは最初の a1 と同様に2020年の表を作り、手動で曜日をカウントしておく。2020年1月1日は、2017年1月1日から曜日が3回進んで水曜日「3」であることに注意すると:

表3: 1月1日の曜日が「3」の うるう年における毎月1日の曜日
1 2 3 4 5 6 7 8 9 10 11 12
日数 (A) 31 29 31 30 31 30 31 31 30 31 30 (31)
A÷7の余り (B) 3 1 3 2 3 2 3 3 2 3 2 (3)
「1日」の曜日 (C) 3 6 0* 3 5 1* 3 6 2* 4 0* 2

表3は表2と同じようなものだが、2月のA欄・B欄が1大きく、C欄の初期値が「3」になっている。表2と同様、前月のB欄とC欄の和がその月のC欄(7以上の場合、7を引く)。そうすると、2020年の統計は:

これで x = (2, 1, 2, 3, 1, 1, 2) が得られたので、問題2の正しい答えは:

a1 = (2, 1, 1, 3, 1, 2, 2)
a2 = (2, 2, 1, 1, 3, 1, 2) = σ(a1)
a3 = (2, 2, 2, 1, 1, 3, 1) = σ(a2)
x  = (2, 1, 2, 3, 1, 1, 2) ← a4 を置き換えた(2月29日の存在を考慮したデータ)
W  = (8, 6, 6, 8, 6, 7, 7) ← 上の4行を成分ごとに足し算   W = a1 + a2 + a3 + x

この W は「ウェット」、つまり「潤い」(うるう年)が含まれる4年間の統計に当たる。正確に言うと「1月1日・日曜日から始まる平年・平年・平年・うるう年」という4年間における、毎月1日の曜日分布を表している(左端の要素が日曜日の数)。…この記事では「2月29日が1回もない4年間」をドライと呼び、「2月29日が1回含まれる4年間」をウェットと呼ぶ。ユリウス暦の4年間(1月1日→4年目の12月31日)は常にウェットだが、グレゴリオ暦(現行のカレンダー)では、ドライな4年間も存在する(詳細は後述)。


統計 x のために表2と似た別の表を作ったり、4年統計が WD の2バージョンに分かれてしまったり、すっきりしない感じだが、とりあえずこのまま進めてみましょう…。

§3 28年間の曜日の分布

4年単位のことは分かったので、4年×7回を考えてみる。

問題3 2017~2045年の28年間における「毎月1日」の曜日の分布はどうなるか。


2017年からの4年間における「毎月1日の曜日の分布」は計算済み(上記の W)。ところで、平年の日数365を7で割った余りは1。うるう年の日数366を7で割った余りは2。だから「平年・平年・平年・うるう年」の4年間を考えると、1月1日の曜日は、4年前の1月1日と比べて 1 + 1 + 1 + 2 = 5 前進する。

別の言い方をすると: 上記4年間の日数 365 + 365 + 365 + 366 = 1461 を7で割ると5余る。

つまり、2021年からの4年間における毎日の曜日は、それぞれ4年前の同じ日の曜日に比べて5個進んでいる。4年前に日曜だった日は全て金曜、月曜だった日は全て土曜、火曜だった日は全て日曜…。だから、2017年からの4年間の統計 W2 について、「W の日曜の回数」=「W2 の金曜の回数」、「W の月曜の回数」=「W2 の土曜の回数」…となる。

従って、W に対してリングシフトを5回行うことにより(=成分を5個ずつ右にずらすことで)、機械的に W2 を求めることができる:

      0  1  2  3  4  5  6  0  1  2  3  4 ← 曜日番号
W  = (8, 6, 6, 8, 6, 7, 7)
W2 =                 8, 6, 6, 8, 6, 7, 7 ← 右に5個ずらした
                           a  b  c  d  e
   = (6, 8, 6, 7, 7, 8, 6)               ← はみ出た部分を左へ
      a  b  c  d  e

「曜日が5個前進」は「曜日が2個後退」と同じ意味なので、左に2個ずらす、と考えても同じこと:

      5  6  0  1  2  3  4  5  6          ← 曜日番号
W  =       (8, 6, 6, 8, 6, 7, 7)
W2 =  8, 6, 6, 8, 6, 7, 7                ← 逆方向に2個ずらした
      y  z
   =       (6, 8, 6, 7, 7, 8, 6)         ← はみ出た部分を右へ
                           y  z

記号的には:

W3 以降も同様で、4年ごとに、統計を左に2個ずつ ずらせばいい。4年×7=28年分を考えると:

W  = (8, 6, 6, 8, 6, 7, 7)
W2 = (6, 8, 6, 7, 7, 8, 6)  ← 逆方向(左)に2個ずらした
W3 = (6, 7, 7, 8, 6, 6, 8)  ← 更に2個ずらした
W4 = (7, 8, 6, 6, 8, 6, 7)  ← 更に2個ずらした
W5 = (6, 6, 8, 6, 7, 7, 8)  ← 更に2個ずらした
W6 = (8, 6, 7, 7, 8, 6, 6)  ← 更に2個ずらした
     48 48 48 48 48 48 48   ← 成分ごとの和

結局、問題3の答えは「どの曜日も48回ずつ」。


以下のように考えると、計算するまでもなく、各曜日が同じ数になることが分かる。…正方向または逆方向に7回リングシフトすると1周して元の状態に戻るのだから、リングシフトの回数(σ の指数)に7の倍数を加減しても、シフト結果は変わらない。従って、上記の和は、次のように表現される(結果が0~6の範囲になるように、指数に7または14を足す)。

  1. W + σ−2(W) + σ−4(W) + σ−6(W) + σ−8(W) + σ−10(W) + σ−12(W)
  2. = σ0(W) + σ5(W) + σ3(W) + σ1(W) + σ6(W) + σ4(W) + σ2(W)

和の順序を並び替えれば、「もともとの(0個ずらした)統計」「1個ずらした統計」「2個ずらした統計」…「6個ずらした統計」をちょうど1回ずつ足し合わせていることになり、結果の各成分は、いずれも、もともとの7個の成分を足し合わせたものに等しい。

(a, b, c, d, e, f, g)  : σ^0(W)
(g, a, b, c, d, e, f)  : σ^1(W)
(f, g, a, b, c, d, e)  : σ^2(W)
(e, f, g, a, b, c, d)  : σ^3(W)
(d, e, f, g, a, b, c)  : σ^4(W)
(c, d, e, f, g, a, b)  : σ^5(W)
(b, c, d, e, f, g, a)  : σ^6(W)
---------------------
(A, B, C, D, E, F, G)

A = a + b + c + d + e + f + g
B = a + b + c + d + e + f + g
C = a + b + c + d + e + f + g
...

この議論では、W の成分の具体的な値は使われていない。つまり、ウェットな4年(平年・平年・平年・うるう年)が反復される28ユリウス年(ユリウス暦の28年間)においては、任意の日付に関して、4年単位の曜日分布が具体的にどうなっていようと、28年間のトータルでは各曜日の出現回数は均等。「1~28日」の日付だけではなく、毎月ある わけではない「29~31日」の曜日を考えたり、極端な話、4年に1度しかない「2月29日」の曜日を考えても、同じ原理によって、

ことが保障されている。

「毎月1日」という日付について、問題1では a1 を手動でカウントし、問題2では W = + a1 + a2 + a3 + x を構成し、問題3ではこの W から28年分の統計を求めた。計算結果は「どの曜日も48回」だった。ところが、上記の考え方に基づくと、次の2行の推論で同じ答えが得られる。

  1. 「月の1日」という日付は 4 × 7 = 28 年間では 12 × 4 × 7 回ある。
  2. 28ユリウス年では、どの曜日も同じ回数になることが保障されているので、各曜日の回数は、上記の数を7で割った 12 × 4 に等しい。

ユリウス暦では、4年より長い周期の変動要素は何もないため、28年単位で曜日が均等=長期的には曜日が均等となる。

§4 400年間の曜日の分布

§2§3の考え方を組み合わせて、本題の「400年ごとの曜日の偏り」を求めてみましょう…。

ユリウス暦では、西暦年数が4で割り切れる年は必ず うるう年。グレゴリオ暦でも普通はそうだが、例外があって、西暦年数が100で割り切れる年については、4回に3回の割合で、平年になる。例えば、1900年・2100年・2200年は(年数が4で割り切れるので)ユリウス暦では うるう年だが、グレゴリオ暦では平年。2000年は、どちらでも うるう年。グレゴリオ暦では、年数が100で割り切れる年は、400で割り切れれば うるう年、割り切れなければ平年という規則になっている。

ユリウス暦の場合、必ず4年に1度うるう年があるのだから、

  1. 28年間では必ず7回うるう年があり、
  2. 従って、28年間の日数は 365 × 28 + 7 であり、
  3. それは7の倍数だから、28年ごとに曜日が循環する。
  4. うるう年の頻度は、100年につき25回、400年につき100回。

一方、グレゴリオ暦の場合、「うるう年がない(ドライな)4年間」が400年につき3回あるので、うるう年の頻度が少し減って、

  1. 400年につき97回うるう年があり、
  2. 従って、400年間の日数は 365 × 400 + 97 であり、
  3. それは7の倍数だから、400年ごとに曜日が循環する。

§3で見たように、28ユリウス年ごとの曜日の分布は均等(48回ずつ)。グレゴリオ暦の場合でも、400年につき3回の例外の年以外はユリウス暦と同様なのだから、グレゴリオ暦の400年単位の曜日分布を計算するこつは、

  1. 「28ユリウス年」単位の期間(=4年に1回うるう年がある28年間)は、計算から除外する。そのような区間では曜日は均等であり、いちいち数える必要はない。
  2. 除去できずに残った期間について、曜日分布を調べる。

…という2段構えになる。400年間の選択と分割については、いろいろなやり方が考えられ、どの方法でも結果は同じだが、ここでは1901~2300年の400年間を次のように6分割しておく。この場合、「ア」「イ」「ウ」の12年×3回だけを考えればいいことになる。ただし「○○年~△△年」という期間は、△△年を含むものとする。

  1. 1901年~2096年の196年間=28ユリウス年 × 7回 … 期間「あ」
  2. 2097年~2108年の12年間 … 期間「ア」
  3. 2109年~2192年の84年間=28ユリウス年 × 3回 … 期間「い」
  4. 2193年~2204年の12年間 … 期間「イ」
  5. 2205年~2288年の84年間=28ユリウス年 × 3回 … 期間「う」
  6. 2289年~2300年の12年間 … 期間「ウ」

「あ」「い」「う」を合わせると、そこには28ユリウス年が 7 + 3 + 3 = 13 回含まれていて、各曜日が 48 × 13 回ずつ出現する。

一方、「ア」「イ」「ウ」の期間は、いずれも例外の年を含んでいる(それぞれ2100年・2200年・2300年が、ユリウス暦と違い うるう年にならない)。問題は、この期間だが…。とりあえず「ア」を考えてみよう。

問題4 グレゴリオ暦では、1901年1月1日は火曜である。期間「ア」の12年間における「毎月1日」の曜日の分布はどうなるか。


1901年の1月1日が火曜なら、196年後の2097年の1月1日も火曜。なぜなら、この196年間はユリウス年(4年に1度うるう年がある)。196は28の整数倍で、28ユリウス年ごとに曜日は元に戻るのだった。ところで、グレゴリオ暦2100年は平年だから、期間「ア」の最初の4年(2097・2098・2099・2100年)はドライ。そしてこの期間は、今見たように、火曜から始まる。従って、その4年間における「毎月1日の曜日分布」は:

  1. σ2(D) = σ2(7, 7, 6, 7, 6, 7, 8)
  2. = (7, 8, 7, 7, 6, 7, 6)

ここで、§2で求めた D を使った。ただし D は「日曜から始まる4年間」のデータなので、火曜から始まる4年間に置き換えるため、要素を2個ずつ ずらしている。

ウェットな4年(平年・平年・平年・うるう年)ごとに、曜日は5前進(=2後退)する。なぜなら、365 + 365 + 365 + 366 を7で割ると、余りは5(§3参照)。ドライな4年(平年×4)では、それより日数が1少ないので、曜日は4前進する。これは 365 + 365 + 365 + 365 を7で割った余りに当たる。そうすると、

  1. 2097・2098・2099・2100の4年間はドライ
  2. だから、2097年1月1日が火曜(曜日番号「2」)なら、4年後の2101年1月1日は土曜(4前進して「6」)。
  3. 更に4年後の2105年1月1日は木曜(そこから2後退して「4」)。…なぜなら2104年は普通に うるう年で、2101・2102・2103・2104の4年間はウェット

結局、「ア」の12年間の曜日分布は次のようになる。

W  = (8, 6, 6, 8, 6, 7, 7)
D  = (7, 7, 6, 7, 6, 7, 8)

σ^2(D)    = 7, 8, 7, 7, 6, 7, 6 ← 2097~2100年(ドライな4年)
σ^6(W)    = 6, 6, 8, 6, 7, 7, 8 ← 2101~2104年(ウェットな4年) σの指数は2+4= 6
σ^4(W)    = 8, 6, 7, 7, 8, 6, 6 ← 2105~2108年(ウェットな4年) σの指数は6-2= 4
           21 20 22 20 21 20 20 ← 上記3行を縦に足し算

σ の指数の変動は、直前の4年間がウェットかドライかによって決まる。

…これで、問題4の答えが得られた: 日・月・火・水・木・金・土の回数が、それぞれ 21, 20, 22, 20, 21, 20, 20。

ところで、「ア」の12年間は、ウェット2回・ドライ1回なので、12年間での曜日の変化量は:

つまり、12年後の曜日が同じになり、期間「ア」が明けた日(2109年1月1日)は再び火曜(*注1)。そこから「イ」までの期間は28ユリウス年の整数倍なので、「イ」の開始日も火曜。同様に「ウ」も火曜から始まる

*注1 2105年1月1日=木曜は計算済みなので、そこから曜日が2後退すると考えてもいい。

そうすると、期間「イ」の曜日分布も、「ア」と同じように計算できる:

σ^2(W)    = 7, 7, 8, 6, 6, 8, 6 ← 2193~2196年(ウェットな4年)
σ^0(D)    = 7, 7, 6, 7, 6, 7, 8 ← 2197~2200年(ドライな4年) σの指数は2-2= 0
σ^4(W)    = 8, 6, 7, 7, 8, 6, 6 ← 2201~2204年(ウェットな4年) σの指数は0+4= 4
           22 20 21 20 20 21 20 ← 上記3行を縦に足し算

同様に、期間「ウ」の曜日分布は:

σ^2(W)    = 7, 7, 8, 6, 6, 8, 6 ← 2289~2292年(ウェットな4年)
σ^0(W)    = 8, 6, 6, 8, 6, 7, 7 ← 2293~2296年(ウェットな4年) σの指数は2-2= 0
σ^(-2)(D) = 6, 7, 6, 7, 8, 7, 7 ← 2297~2300年(ドライな4年) σの指数は0-2= -2 (☆)
           21 20 20 21 20 22 20 ← 上記3行を縦に足し算

(☆) の σ−2(D) は「D を逆方向に2個ずつずらす」操作で、σ5(D) と同じこと(§3参照)。

3個の小計を足し合わせれば、「ア・イ・ウ」の36年間における曜日分布 n が得られる:

「ア・イ・ウ」以外の期間では曜日は均等(前記のように、48 × 13 = 624回ずつ)なのだから、グレゴリオ暦の曜日の偏りは n に集約される。「毎月1日は日曜になりやすいが、月曜や土曜には なりにくい」こと、「その際、多い曜日と少ない曜日で4回の差があること」が見て取れる。400年分の統計を c とすると:

  1. c = (624, 624, 624, 624, 624, 624, 624) + n
  2. = (688, 684, 687, 685, 685, 687, 684)

c は毎月1日の曜日分布だが、毎月2~28日の曜日分布は、単に c をリングシフトすることで得られる。例えば12日先の「毎月13日」の分布は

  1. σ13−1(c)
  2. = σ5(c)
  3. = (687, 685, 685, 687, 684, 688, 684)

となって、確かに金曜日が多い。

あまりきれいな計算ではないが、めでたく400年間の曜日分布が求まった(毎月1~28日について)。

表4: グレゴリオ暦400年ごとの「各月 d 日」の曜日の回数(d ≤ 28
d = 1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
688回
687回 火・金 水・土 日・木 月・金 火・土 日・水 月・木
685回 水・木 木・金 金・土 日・土 日・月 月・火 火・水
684回 月・土 日・火 月・水 火・木 水・金 木・土 日・金

この統計には、ある種の対称性が隠れている…。例えば13日の金曜日は688回だが、その1個前・1個後の曜日(木曜・土曜)の回数はいずれも684で等しく、2個前・2個後の曜日はいずれも687回で等しく、3個前・3個後の曜日はいずれも685回で等しい。これには何か理由がある はずだが…。

§5 解法の整理と改善

§1§4の解法は計算が複雑で、見通しが悪い。「29日以降の曜日は どうなるのか」という点に関して応用も利かないし、隠れた対称性の意味にも迫れていない。

もう少し優雅にやってみましょう…。

「1年」の定義の変更

1年は3月1日に始まり、翌2月末日まで」と約束する。平年は2月28日で終わり、うるう年は2月29日で終わる。この新しい定義の下で、年初を日曜日とすると、表2に当たるものは:

表5: 3月1日の曜日が「0」の年の毎月1日の曜日
3 4 5 6 7 8 9 10 11 12 1 2
日数 (A) 31 30 31 30 31 31 30 31 30 31 31 (?)
A÷7の余り (B) 3 2 3 2 3 3 2 3 2 3 3 (?)
「1日」の曜日 (C) 0 3 5 1* 3 6 2* 4 0* 2 5 1

2月の日数は平年・うるう年によって異なるため「?」となっているが、この数値は計算上 必要ない。表2では、12月のデータが丸括弧内になり使われなかった。ここでも、年末の月の日数は、年内の1日の曜日とは無関係(われわれの定義では翌3月は年内ではない)。このやり方なら、平年・うるう年のどちらにも対応できる便利なデータが得られる。

C欄を見ると「4」と「6」が1回ずつ、それ以外が2回ずつ出現している。従って、12カ月(3月1日・日曜日が起点)における毎月1日の曜日の頻度は:

これを(1日についての)1年統計と呼ぶことにする。

4年統計と関数 f

リングシフトしながら1年統計を4個束ねれば、(1日についての)4年統計、つまり4年を単位とする曜日分布のデータが得られる。365 ≡ 1, 366 ≡ 2 (mod 7) なので、リングシフト量は、その年が平年なら1、うるう年なら2。実際には、必ず4年に3回以上 平年があるのだから、「初めの3年間は常に平年」と仮定できる。のみならず、4年目が うるう年か平年かを気にする必要もない。というのは、その違いは4年間の最終日に関するもので、その影響が現れるのは(29日自身のカウントを別にすれば)5年目以降に限られる。要するに「平年/うるう年両対応」の y を基にすることで、4年統計も「ウェット/ドライ両対応」になってくれる。ここでウェットとは4年単位の最終日が2月29日の場合、ドライとは4年単位の最終日が2月28日の場合。

4年単位のデータなので、quad という意味で q と呼んでおこう:

  1. q = y + σ(y) + σ2(y) + σ3(y)
  2. = (6, 7, 7, 8, 7, 7, 6)

おやおや、ベクトルの成分がきれいに左右対称に並んだぞ! 狙ってやった わけではないが、これは幸先が良さそうだ。

q は最初の計算における W または D に相当するベクトルだが、そんな面倒な区別も必要なくなった。

入力が y とは限らない一般の場合に備えて、y から q を得る処理を関数 f として抽象化しておこう。以降、抽象的な処理を表す場合、入力を任意の7次元ベクトル X = (α0, α1, …, α6)、出力を Y = (β0, β1, …, β6) で表すことにする。

となって、出力 Y の各成分は次の関係を満たす。

ただし、添え字 i が0未満になったとき(あるいは7以上になったとき)には、適宜そこに7を加減して、i が常に0~6の範囲であるかのように扱う。この点は、以降の議論でも同様。

入力の各成分について、自分自身から3個左の成分までの4成分を足し合わせたものが、対応する出力の成分となる(α0 の左の成分は α6)。例えば q の右端の成分は、y の右側4個の成分を足し合わせたものに等しい。

ここで考えているベクトルにおいては、「右端の更に右は左端」「左端の更に左は右端」と理解される。イメージとしては、円周を7等分した点(=1日が7時間の星のアナログ時計の数字の位置)に成分があって、円周上で左右を考えている。この表記法を使ってリングシフト σ をあらためて定義すると:

自明統計と関数 g

「平年・平年・平年・うるう年」という4年間が経過した瞬間において、曜日の前進量は 365 × 3 + 366 ≡ −2 (mod 7)。従って、それが7回連続した28ユリウス年における曜日分布は:

この式の右辺各項について「もともとのベクトル q のどの成分が、左端の成分になるか」を考えると、それは「円周を7等分した点について、毎回2個先の点に飛び移りながら6回ジャンプする動き」と等価であり、q の各成分がちょうど1回ずつ(どこかの項において)左端に来る(§3)。ゆえに t の左端の成分は、q の各成分の和に等しい。t のそれ以外の各成分についても同様だから、28ユリウス年ごとに曜日分布は均等。

この議論が成り立つのは、曜日の種類の数(7)が素数だから。もし仮に曜日が8種類だったとすれば、2個先・2個先…とジャンプした場合、出発点の偶奇に応じて、偶数曜日・奇数曜日ばかりが繰り返し選択されてしまうだろう。

28ユリウス年(言い換えれば、ウェットな4年間×7回の期間)を自明28年と呼び、自明28年における曜日分布を自明統計と呼ぶことにする。一般に、4年統計から自明統計を得る操作を g とすると:

  1. Y = g(X) = X + σ(X) + σ2(X) + … + σ6(X)
  2. βi = α0 + α1 + … + α6

特に、q = (6, 7, 7, 8, 7, 7, 6) から得られる自明統計 t の各成分は、いずれも q の全成分の和(6 + 7 + 7 + 8 + 7 + 7 + 6 = 48)に等しい:

実際の計算では「28年間に含まれる日付には曜日が均等に配分されるのだから、28年間における各曜日の回数は、28/7 = 4 年分の日付の回数に等しい。4年間の毎月1日の数は 4 × 12 = 48」と考えた方が早い。

非自明統計と関数 h

グレゴリオ暦では400年周期で曜日が循環するのだから、連続400年ならどの区間を考えても、曜日分布は同じ。1900年3月1日~2300年2月28日を考え、次のように6分割すると都合がいい。

  1. 1900年3月~2096年2月の196年間 … 自明28年×7
  2. 2096年3月~2108年2月の12年間 … 非自明(ドライ・ウェット・ウェット)
  3. 2108年3月~2192年2月の84年間 … 自明28年×3
  4. 2192年3月~2204年2月の12年間 … 非自明(ウェット・ドライ・ドライ)
  5. 2204年3月~2288年2月の84年間 … 自明28年×3
  6. 2288年3月~2300年2月の12年間 … 非自明(ウェット・ウェット・ドライ)

3回の非自明な12年間のそれぞれを非自明12年と呼び、3回分36年をまとめて非自明36年と呼ぶことにしよう。

400年間の始点1900年3月1日は木曜。そのため、6個の期間(自明または非自明)の全てが木曜から始まる。なぜなら自明28年の日数は7の倍数であり、非自明12年の日数も7の倍数。後者については、ウェットが2回なので、365 × 12 + 2 ≡ 1 × 12 + 2 ≡ 0 (mod 7) となる。どの期間も木曜から始まる分割法なので、これをジュピター分割と名付けておく。

非自明12年のそれぞれについて: (1) 最初の4年間を取り出すと、その期間の曜日分布は、同一の4年統計 q′ = σ4(q) に従う(いずれも木曜から始まるので)。(2) 中央の4年間末尾の4年間q を順次リングシフトものであり、相対的なシフト量は、直前の4年間がウェットかドライかに応じて −2 または −3。…ゆえに、非自明36年における曜日分布 n は:

  1. n = [q′ + σ−3(q′) + σ−3−2(q′)]
    + [q′ + σ−2(q′) + σ−2−3(q′)]
    + [q′ + σ−2(q′) + σ−2−2(q′)]
  2. = [3 + 2(σ2 + σ−2) + (σ3 + σ−3)](q′)

式の変形では、σ−5 = σ2 のような性質を使った。写像の和と定数倍については、普通に定義する。例えば [2(σ2 + σ−2)](q′) = 2σ2(q′) + 2σ−2(q′)。結局、n は次の関数 h によって計算される。

入力の各成分について「自分自身の3倍」「2個前・2個後ろの成分それぞれの2倍」「3個前・3個後ろの成分それぞれの1倍」を足し合わせたものが、対応する出力の成分。この hq に対する計算であり、q に対する計算ではない。

n非自明統計と呼ぶことにする。実際に計算すると:

  1. q′ = σ4(q) = (8, 7, 7, 6, 6, 7, 7)
  2. n = h(q′) = (64, 60, 63, 61, 61, 63, 60)

自明期間(自明28年×13回)については、曜日は均等に分布している。従って、400年ごとの統計を c とすると:

すなわち:

  1. c = 13(48, 48, 48, 48, 48, 48, 48) + (64, 60, 63, 61, 61, 63, 60)
  2. = (688, 684, 687, 685, 685, 687, 684)

表4が再び得られた。


(別解1) 1900年3月~2300年2月を200+100+100年の3期間に分割して、前半の200年間を自明28年×7 + 非自明4年に分け、後半の100年間のそれぞれを自明28年×3 + 非自明16年に分けてもいい。その場合の非自明期間は:

  1. 2096年3月~2100年2月の4年間(ドライ) … σ−3(q)
  2. 2184年3月~2200年2月の16年間(ウェット・ウェット・ウェット・ドライ) … σ1(q) + σ−1(q) + σ−3(q) + σ−5(q)
  3. 2284年3月~2300年2月の16年間(ウェット・ウェット・ウェット・ドライ) … σ−1(q) + σ−3(q) + σ−5(q) + σ−7(q)

上記3行には σ−3 が3回、σ−3±2 が2回ずつ、σ−3±4 が1回ずつ現れ、q′ = σ−3(q) と置くことにより、直ちに h が得られる。ジュピター分割と比べた場合、最初の2個の期間の始点は同じだが、その先では、2100年と2184年の3月1日・月曜、2200年と2284年の3月1日・土曜が期間の始点となる。この分割法をルナ・サターン分割と名付けておく。この方法でも、自明期間を通算した統計は 13t に等しい。のみならず、上記9項の和である非自明統計は n に等しい。なぜなら400年間における曜日分布 c は一定で、どちらの非自明統計も、そこから 13t を引いたものだから。


(別解2) 1900~2300年という期間設定、特にジュピター分割には、天下り的な面がある。グレゴリオ暦2000~2400年(あるいは0~400年)を考え、それを100年ごとに区切って4分割するのが、区切り方としては最も自然だろう。その場合、4回ある100年間のそれぞれについて、最初の84年間は自明28年×3回であり、末尾の16年間は次の構造を持つ:

  1. 2084年3月~2100年2月の16年間(ウェット・ウェット・ウェット・ドライ) … σ3(q) + σ1(q) + σ−1(q) + σ−3(q)
  2. 2184年3月~2200年2月の16年間(ウェット・ウェット・ウェット・ドライ) … σ1(q) + σ−1(q) + σ−3(q) + σ−5(q)
  3. 2284年3月~2300年2月の16年間(ウェット・ウェット・ウェット・ドライ) … σ−1(q) + σ−3(q) + σ−5(q) + σ−7(q)
  4. 2384年3月~2400年2月の16年間(ウェット・ウェット・ウェット・ウェット) … σ−3(q) + σ−5(q) + σ−7(q) + σ−9(q)

σ の指数のうち、左上の項の「3」は2084年3月1日・水曜に対応している(2000年3月1日と同じ曜日)。項が進むごとに、また行が進むごとに、指数は2ずつ減少する(365 × 4 + 1 ≡ −2, 365 × 100 + 24 ≡ −2)。整然として美しい。ただし、このままでは「自明期間」が28年×12回だけで、「非自明期間」が16年×4回ある。理論的には それでもいいが、非自明部分が増えると、実際の計算は複雑になる。実は、この64年の「非自明期間」から自明28年を1回取り出すことができ、その残りが非自明36年に当たる。すなわち、16項の和は:

  1. −3(q) + 3[σ−1(q) + σ−5(q)] + 2[σ1(q) + σ−7(q)] + 1[σ3(q) + σ−9(q)]
  2. = t + 3σ−3(q) + 2[σ−1(q) + σ−5(q)] + 1[σ1(q) + σ−7(q)]

1行目から2行目への変形において、7種類の項の和 σ3(q) + σ1(q) + σ−1(q) + … + σ−9(q) が自明統計 t に等しいことを使った。2行目第2項以下の和は n に等しい。

非自明36年を4年単位で並び替えて、そこから(更に)自明28年を取り出すことは できない。というのは、非自明36年においては曜日分布に偏りがあり、4年単位の起点3月1日として出現しない曜日がある。自明28年は「4年間×7組。組の起点は各曜日1回ずつ」なので、それを非自明36年から構成することは不可能。

要約

「1年は3月1日に始まり、2月末日に終わる」と約束する。「平年・平年・平年・うるう年」という4年間が曜日「0」から始まるとき、最初の1年間における毎月1日の曜日分布

は、12回の「1日」の曜日を調べることにより、容易に得られる。ここで δ0, δ1, …, δ6 は、それぞれ曜日「0」~曜日「6」の回数。このとき、グレゴリオ暦400年ごとの曜日分布カウント c は、次のように表現される。

ここで t = g(q) は28年周期の自明統計、n = h(q′) はそれに当てはまらない36年間の非自明統計であり、それらの引数 q, qy から容易に生成される:

  1. q = f(y)
  2. q′ = σ4(q)

f, g, h は、いずれもリングシフト σ の多項式である(σ−2 = σ5 なども多項式の成分とみなす):

  1. f = σ0 + σ1 + σ2 + σ3
  2. g = σ0 + σ1 + … + σ6
  3. h = 3 + 2(σ2 + σ−2) + (σ3 + σ−3)

ここでは h として、手計算・暗算に便利な形式が選択されている。数学的には、次のように書いた方が気持ちいい:

q を介在させずに、σ4h を一つにまとめる こともできる:

  1. h′ = hσ4 = 3σ4 + 2(σ6 + σ2) + (σ7 + σ1)
  2. = 1 + σ + 2σ2 + 3σ4 + 2σ6
  3. n = h′(q)
曜日分布の偏りの対称性

qq を使い分けること(言い換えれば、hσ4h に分解すること)は、無意味な回り道とも思える。しかし、このやり方には大きなメリットがある。というのは、h の操作は σ に関して左右対称で、入力側の

も、8 を中心に成分が左右対称。左右対称のベクトルに左右対称の操作を行えば、結果のベクトルも左右対称になる。つまり、h においては、左端の成分から中央成分までを計算すれば、全成分を計算したのと同じことになる!

h の入力は q をずらした q なので、その時点で対称性が破れてしまうようだが、ベクトルの左端の成分が何曜日を表していても、h の計算の仕方は変わらない。q を作るとき、q の成分の位置を物理的に動かさず、q と見掛けが同じ

を持ち出して、「このベクトルでは左端の成分が木曜の数、中央の成分が日曜の数を表している」と言い張っても計算に支障はなく、その場合、出力においても、左端成分が木曜の数となる。n = h(q′) を実際にその方法で計算してみよう。3倍・2倍・1倍される部分を最初に求めておくと:

  1. σ0(q′) = (6, 7, 7, 8, …)
  2. 2 + σ−2)(q′) = (7, 6, 6, 7, …) + (7, 8, 7, 7, …) = (14, 14, 13, 14, …)
  3. 3 + σ−3)(q′) = (7, 7, 6, 6, …) + (8, 7, 7, 6, …) = (15, 14, 13, 12, …)

従って:

  1. n = 3(6, 7, 7, 8, …) + 2(14, 14, 13, 14, …) + 1(15, 14, 13, 12, …)
  2. = (18, 21, 21, 24, …) + (28, 28, 26, 28, …) + (15, 14, 13, 12, …)
  3. = (61, 63, 60, 64, …)

0, β1, β2, β3, …) の形の各項の β3 が日曜日の数に当たる。省略されている右側の成分の値は計算途中では不明だが、対称性から、最終結果が 0, β1, β2, β3, β2, β1, β0) となることが保障されている。普通に計算した場合と比べ、計算量が約半分で済んだ。

n = (61, 63, 60, 64, …) という表現から、次のことが分かる: 曜日不均等の原因となる非自明36年において、毎月1日の曜日は日曜が64回で最多、その1個前後の曜日(土曜・月曜)は60回で最少、2個前後(金曜・火曜)は63回、3個前後(木曜・水曜)は61回。…計算で楽ができた上、偏りのパターンの対称性も鮮明になった。

手計算や暗算をする場合、q′ = (6, 7, 7, 8, …) の成分の仮平均 7 を経由すると、更に計算量を節約できる。I = (1, 1, 1, 1, 1, 1, 1) と置くと:

  1. q′ = 7I + Δ
  2. Δ = (−1, 0, 0, 1, 0, 0, −1)
  3. n = h(7I + Δ) = h(7I) + h(Δ)

h(7I) = 9 × 7I = (63, 63, 63, 63, …) は簡単に確かめられるので、あとは それとの差分に当たる h(Δ) が分かればいい。これは 0, ±1 に対する和と1~3倍の計算に帰着される。もちろん最初の4成分だけ求めれば足りる:

  1. h(Δ) = (3(−1) + 2(0+0) + 1(1+0),
    3(0) + 2(1−1) + 1(0+0),
    3(0) + 2(0−1) + 1(0−1),
    3(1) + 2(0+0) + 1(−1−1), …)
  2. = (−2, 0, −3, 1, …)

もはや n の具体的な値も必要ない。

  1. t = 48I
  2. n = h(7I) + h(Δ) = 63I + h(Δ)
  3. c = 13t + n
  4. = 13 × 48I + 63I + h(Δ)
  5. = 687I + (−2, 0, −3, 1, …)
  6. = (685, 687, 684, 688, …)

左端の成分が木曜日の数に当たる。結局、グレゴリオ暦の曜日の分布の偏りは、

というシンプルな式に帰着される(毎月1~28日について)。


理論的には、最初から「全てのベクトルでは、左端の成分が木曜日の数を表す」とすれば、すっきりする。q = q となり、回り道なしに対称性のメリットだけを享受できる。

曜日計算の基準点1900年3月1日が木曜であるという点においても、ジュピター分割の各期間の始点が全て木曜であるという点においても、「グレゴリオ暦は木曜日から始まる」という考え方は本質を突いている。面白い偶然として、Unixエポック(1970年1月1日世界時0時)も木曜日であり、Unixタイムスタンプ 0 は木曜日になる。

しかし、実際の計算上では q から q への変換 σ4 の手間は小さく、それを省略できても大して得にならないし、「曜日番号0が木曜日」という定義は直観に反し、むしろ心理的混乱の原因になる。のみならず、以下で見るように、「29日・30日」の計算では、左端の成分をそれぞれ金曜・土曜とすることが近道となる。「左端が木曜」が最善とは言い切れない。

歴史的には、グレゴリオ暦は1582年10月15日・金曜日に始まった(その前日は、ユリウス暦1582年10月4日・木曜日)。

§6 「29~31日」の曜日の分布

「1~28日」の曜日分布は分かったので、「29~31日」について調べてみたい。「29日」は複雑なので「30日」から始める。

問題5 グレゴリオ暦の400年間における「月の30日」という日付の曜日分布はどうなるか。


仮に「30日」という日付が毎月あれば、「30日」の曜日分布の1年統計は、

で与えられる(左端が日曜日の数)。実際には、2月には「30日」が存在しない。仮に「2月30日」が存在していたとすれば、その曜日は2月2日と同じで、火曜(なぜなら、表5によると2月1日は月曜)。現実には それが存在しないのだから、正しい1年統計 y30 においては、火曜日の数が1少なくなる:

これを用いて4年統計・自明統計・非自明統計を計算すると:

  1. q30 = f(y30) = (6, 6, 6, 6, 7, 6, 7)
  2. t30 = g(q30) = 44I
  3. q30 = σ4(q30) = (6, 7, 6, 7, 6, 6, 6)
  4. n30 = h(q30) = (55, 59, 54, 59, 55, 57, 57)

ここで I = (1, 1, 1, 1, 1, 1, 1)。400年間における「30日」の曜日分布は:

手計算の場合、中央成分が火曜日(左端が土曜日)の数になるように q30 を書き換えると、成分が左右対称になって次のショートカットが成り立つ。

  1. q30 = (6, 6, 7, 6, …) = 6I + Δ
  2. Δ = (0, 0, 1, 0, 1, 0, 0)
  3. n30 = h(q30) = 54I + h(Δ)
  4. c30 = 13 × 44I + 54I + h(Δ)
  5. = 626I + (3, 1, 5, 0, …)

「30日」の曜日については、火曜が深い谷で、その1個前後の曜日とは5回の頻度差が生じることが分かる。曜日分布が偏っているグレゴリオ暦の中でも、これは偏りの絶対値最大。

問題6 「31日」の曜日分布はどうなるか。


1年統計は、容易に確かめられる:

それに基づく各種統計は次の通り:

  1. q31 = f(y31) = (5, 5, 5, 4, 3, 3, 3)
  2. q31 = (4, 3, 3, 3, 5, 5, 5)
  3. t31 = 28I
  4. n31 = (36, 35, 37, 34, 38, 35, 37)
  5. c31 = (400, 399, 401, 398, 402, 399, 401)

「31日」の曜日分布に対称性はないが、仮平均と差分を利用すれば、計算量を少し減らせる。

  1. q31 = 4I + Δ
  2. Δ = (0, −1, −1, −1, 1, 1, 1)
  3. n31 = h(q31) = 36I + h(Δ)
  4. c31 = 13 × 28I + 36I + h(Δ)
  5. = 400I + (0, −1, 1, −2, 2, −1, 1)

「31日」という日付は出現回数が7の倍数なので、計算上、曜日が均等に配分される可能性があるが、実際には そうなっていない。「1~31日」の曜日分布の偏りのうち「31日」のそれは相対差において最大。曜日格差が約1.0%に達する。「13日・金曜日」の多さも異常だが、「31日・水曜日」の少なさと「31日・木曜日」の多さは、偏りの度合いが更に大きい。

問題7 「29日」の曜日分布はどうなるか。


29日についての4年統計 q29 は、4年単位の末尾の2月29日の有無によって異なる。まず「平年・平年・平年・平年」というドライな4年間について考えてみよう。

29 ≡ 1 (mod 7) なので、1年統計 y29y = (2, 2, 2, 2, 1, 2, 1) とほぼ等しいが、1年の末尾に「2月29日」は存在しない。仮に「2月29日」が存在していたとすれば、その曜日は2月1日と同じで、表5から月曜。現実には それが存在しないのだから:

4年単位の末尾の「2月29日」の存在の可能性を無視した場合(言い換えれば、2月以外の月だけを考えた場合)、4年統計は:

これは「ドライな4年統計」に当たる。実際には通常の4年はウェットで、4年単位の末尾に「2月29日」が存在する。ウェットな4年統計において、この2月29日は木曜(なぜなら、出発点3月1日・日曜の4ユリウス年先は3月1日・金曜で、2月29日はその前日)。従って、2月29日だけをカウントした4年統計は:

「2月」と「2月以外」の両方を含むウェットな4年統計・自明統計は、次のようになる。

  1. q29 = q(2月)29 + q(2月以外)29 = (6, 6, 6, 7, 7, 7, 6)
  2. q29 = σ4(q29) = (7, 7, 7, 6, 6, 6, 6)
  3. t29 = g(q29) = 45I

非自明統計は、大筋において:

ただし、上記において h に入力された q29 は、ウェットな4年統計である。現実において、非自明36年にはドライな4年間が3回含まれ、それらの末尾には「2月29日」が存在しない。3回の「幻の2月29日」は「2100年・2200年・2300年の2月28日の翌日」であり、現実のグレゴリオ暦では「2100年・2200年・2300年の3月1日」に当たる。この3個の日付の曜日が「2月29日の曜日」として不正にカウントされているので、それらを統計から除外する必要がある。

2000年3月1日は水曜。2100年・2200年・2300年の3月1日は、そこから曜日が順次2個ずつ後退して、それぞれ月・土・木曜(なぜなら 365 × 100 + 24 ≡ −2)。よって、正しい非自明統計は:

ゆえに、400年間における「29日」の曜日分布は:

「29日」についての統計は「1日」についての統計と似たパターン(日曜が最多、月曜・土曜が最少)を持つが、火曜も日曜と同数で、対称性はない。計算途中では q29 が対称性を持つ。月曜日の数が中央要素となるように q29 を書き換えれば、h の計算において、いつものショートカットが成り立つ。


(別解) 読みやすさのために「2月29日」を a、「2月以外の29日」を b で表す。qa = q(2月)29 であり、qb = q(2月以外)29 である。 「2月以外の29日」についての統計 cb は、qb から機械的に計算される:

  1. tb = g(qb) = 44I
  2. nb = h4(qb)) = (59, 54, 59, 55, 57, 57, 55)
  3. cb = 13tb + nb = (631, 626, 631, 627, 629, 629, 627)

「2月29日」についての統計 ca を求め、それを cb に足せば c29 が得られる。「2月29日」についての自明統計は:

非自明統計については、ルナ・サターン分割を使って計算しよう。非自明期間は「4+16+16年」に分解される。このうち、最初の4年はドライ。2回ある16年それぞれの、末尾4年もドライ。それらは計算に関係しないので:

  1. na = [(σ1 + σ−1 + σ−3) + (σ−1 + σ−3 + σ−5)](qa)
  2. = (0, 2, 0, 2, 0, 1, 1)

ゆえに:

  1. ca = 13ta + na = (13, 15, 13, 15, 13, 14, 14)
  2. c29 = ca + cb = (644, 641, 644, 642, 642, 643, 641)

2月29日は400年に97回しか存在せず、そのうち91回は自明。この別解では、非自明な6回を直接数えた。ジュピター分割の「非自明12年に2回ずつある2月29日」の曜日を数えることによっても na を求められるが、少し面倒くさい。


以上によって、「1~31日」の どの日付についても、統計が得られた。表4の範囲外だった部分は次の通り。

表6: グレゴリオ暦400年ごとの
d 日」の曜日の回数(d = 29, 30, 31
d = 29 30 31
644回 日・火
643回
642回 水・木
641回 月・土
631回 月・水
629回 金・土
627回 日・木
626回
402回
401回 火・土
400回
399回 月・金
398回

表4と表6では、400年分のカレンダーに含まれる14万6097個の日付について、d ごとに曜日の頻度を数えた。

§7 考察

§1§4の解法はストレートで素朴だが、計算の見通しが悪かった。§5では、平年・うるう年の違いを吸収した処理 f, g, h を考えることにより、一度も2月29日の有無(平年と うるう年の違い)に煩わされることなく、400年分の曜日をカウントすることができた。「29日」についての統計(§6)に関しては手動補正が必要になったが、それは、f, g, h において「2月29日の有無」が捨象されている証しでもある。

不均等のメカニズム

グレゴリオ暦においては、400年を周期に曜日が循環する。ところが、この400年間においては、曜日が均等である自明28年の繰り返しの中に、3回の「非自明12年」が混入している。自明期間では28年を周期に曜日と日付の関係が一巡するが、非自明期間では、12年で短絡的に曜日がリセットされてしまう。ドライな4年間が、短絡リセットの引き金となる:

3回の「非自明12年」には、D-W-W vs. W-D-W vs. W-W-D というドライ位置の違いがあるものの、それらを重ね合わせても、曜日の不均等が打ち消し合ってなくなる わけではない。それどころか、波の干渉のように、偏りが強調されてしまう:

[ 0] [-1] [-2] [-3] [-4] [-5] [-6] 
  *              *         *        : (-3)(-2)(-2)
  *         *              *        : (-2)(-3)(-2)
  *         *         *             : (-2)(-2)(-3)
  3         2    1    1    2       

ここで [0] は、非自明12年の初日の曜日であり、ジュピター分割なので、木曜に当たる。* は、4年単位の初日の曜日を表している。つまり、非自明期間において、4年単位の初日は木曜になりやすい。この偏りは、そのままグレゴリオ暦全体の偏りとなる(自明期間には曜日の偏りは ないため)。

q = (6, 7, 7, 8, 7, 7, 6) というベクトルの成分の配置(§5)から、「4年単位の初日の曜日の、3個先の曜日」が4年統計のグラフの山となる。つまり、4年単位の初日が木曜になりやすいなら、毎月1日は日曜になりやすい。「1日」から見て −2 (mod 7) の位置にある「13日」は金曜になりやすい。

21世紀初めの現在は、自明な196年間の中央付近なので、未来を見ても過去を見ても曜日に偏りがないように感じられる。2100年前後の人たちは、日常的な問題として「何だか曜日が変だなあ」と感じるかもしれない。もちろん「人類が存続して、曜日を気にする余裕があるとすれば」の話だが…。

背後にある数学

「非自明期間があると必ず曜日が偏る」という わけではない。「7種類の非自明期間があって、それらを合計すると不均等が相殺される」というパターンも考えられる。最終的な曜日の均等・不均等は、どこで決まるのだろうか?

1年=12カ月という前提において、年数の12倍が7で割り切れないような周期(グレゴリオ暦の場合、400年=4800カ月)で曜日が循環すれば、「毎月1日」を7種類の曜日に公平に分けることは原理的に不可能。7で割り切れない整数を12倍しても、7で割り切れるようには ならない(7は素数だから)。従って、曜日が均等であるためには、曜日循環周期の年数そのものが7の倍数であることが必要。言い換えると:

二つのケースが考えられる:

グレゴリオ暦は《ケース2》だが、そこにおける必要条件を満たしていない。

グレゴリオ暦への改暦の主目的は、「暦の上での1年」を「現実の1年」(*注2)に近づけることだった。曜日分布の偏りは、その副作用として生じた。置閏周期を選び直せば、この副作用は簡単に消滅する。手っ取り早い方法は「100で割り切れる年は平年、ただし400で割り切れる年は うるう年」という現行ルールを「100で割り切れる年は平年、ただし500で割り切れる年は うるう年」と改めること。その設定なら、Y の日数

が7で割り切れないので《ケース1》になり、曜日は均等になる。のみならず、この設定の方が暦と四季のずれが少なくなる(*注3)と見込まれる(表7)。

*注2 一般的な解釈では「現実の1年」=「四季の循環の平均周期」。改暦当時の認識としては、教会の行事(イースターの日付)との関連から「現実の1年」=「春分の間隔」だった可能性が高い。

*注3 春分の間隔との同期に関しては、改暦時点・現時点において、グレゴリオ暦の方が優秀。

n を正の整数、置閏周期を 100n 年として、「年数が4の倍数の年は、うるう年。ただし、年数が100の倍数のときは、年数を 100n で割った余りに応じて、事前定義されたパターンに従って平年または うるう年」という暦を「グレゴリオ型」と呼ぶことにする(表7)。置閏周期を4年単位で区切ったときの「平年・平年・平年・うるう年」の回数を「ウェット」、「平年・平年・平年・平年」の回数を「ドライ」とすると「ウェット + ドライ = 周期÷4」で、「周期×365 + ウェット」が置閏周期の日数となる。

表7: グレゴリオ型の暦の例(誤差は「1年=365.2418日」とした場合の参考値)
置閏周期(年) ウェット ドライ 置閏周期(日) 年の平均日数 誤差(分/年)
400 97 3 0 mod 7 365.242500 +1.0
500 121 4 5 mod 7 365.242000 +0.3
600 145 5 3 mod 7 365.241667 −0.2
700 169 6 1 mod 7 365.241429 −0.5
800 193 7 6 mod 7 365.241250 −0.8
900 218 7 5 mod 7 365.242222 +0.6

「置閏周期400年」が現行のグレゴリオ暦だが、その曜日的な問題点は表7から一目瞭然だろう。置閏周期の日数が7で割り切れてしまうのは、確率7分の1で発生する「不運な設定」だった。


「年」(四季の循環の平均周期)と「日」の比は、西暦2000年の時点で約 365.2422。大ざっぱに言えば、これは地球の公転周期と自転周期の比に当たる。この比は現在だんだん減少していて、仮に「1日」の長さが一定だとしても、西暦10000年には 365.2418365.2419 になる。…実際には、地球の自転が減速しているため「1日」はだんだん長くなり、その結果「年÷日」は更に小さくなって、西暦10000年には 365.2413 くらいになると見込まれる。地球の自転の減速は1次式のような単純なもの ではなく、まだよく分かっていない。表7の誤差の欄では、一応「年 = 365.2418日」と仮定した。暦の上で そのくらいの値になっていれば、今後1万年くらいは暦と季節が高精度で一致するだろう。その場合でも、2万年後・3万年後には暦と季節が ずれてしまう。長期にわたって季節と ずれないためにはグレゴリオ型では駄目で、「比の変化に合わせて、うるう年の頻度を調整する仕組み」が必要とされる。

付録

付録A: 1年統計を計算で求める方法

実用上はを書いて曜日を数えるのが手っ取り早いが、次のように1年統計 y を計算することもできる。3月~翌1月の各月の日数は、7を法として

  1. 3 2 3 2 3
  2. 3 2 3 2 3
  3. 3

というパターンを持つので、3月(または その5カ月後・10カ月後)の1日の曜日を入力とすると、翌月の(1カ月間の)1日の曜日は

で表される。同様に、3月(または その5カ月後)の1日の曜日を入力とすると、1~5カ月後の(5カ月間の)1日の曜日は

  1. π = σ3 + σ3+2 + σ3+2+3 + σ3+2+3+2 + σ3+2+3+2+3
  2. = σ1 + 2σ3 + σ5 + σ6

で表される。3 + 2 + 3 + 2 + 3 ≡ −1 なので、この5カ月間で曜日は1後退。ゆえに、3月1日・日曜を u = (1, 0, 0, 0, 0, 0, 0) として「1カ月 + 5カ月 + 5カ月 + 1カ月」の12カ月を考えると:

  1. y = u + π(u) + π(σ−1(u)) + μ(σ−2(u))
  2. = [1 + π + σ−1π + σ](u)
  3. = [(π + σ) + σ−1(π + σ)](u)

π + σ = 2σ1 + 2σ3 + σ5 + σ6u に適用すると (0, 2, 0, 2, 0, 1, 1)。これを v とすると:

  1. y = v + σ−1(v)
  2. = (0, 2, 0, 2, 0, 1, 1)
    + (2, 0, 2, 0, 1, 1, 0)
  3. = (2, 2, 2, 2, 1, 2, 1)

v は、3月1日・日曜から始まる1年間における「4・5・6・7・8・2月の1日の曜日」を表している(月・水が2回ずつ、金・土が1回ずつ)。「それ以外の月の1日の曜日」は σ−1(v) に等しい。ところで、

  1. π + σ = (σ5 + σ3 + σ1) + (σ3 + σ1 + σ−1)
  2. = [(σ1 + σ−1 + σ−3) + (σ−1 + σ−3 + σ−5)]σ4

と書くことができる。問題7によると q(2月)29 = σ4(u) なので、v問題7別解na に等しい。


13日は金曜になりやすく31日は水曜になりにくい > 目次

13日は金曜になりやすく31日は水曜になりにくい > 作成メモ・更新履歴

この記事は画像も含め、パブリックドメインです。カレンダー画像・飾りの画像は openclipart.org より。

  1. 2016年9月28日: 佐藤郁郎先生のコラム365.2422(その6)」に触発され、「なぜ13日は金曜日になりやすいか?」という題で書き始めた。2016年10月に公開予定。
  2. 2016年10月23日: 予定を変更して「公式不要の明快な曜日計算」を先に公開。
  3. 2016年11月17日: 半分くらい下書きしたが、この後、半年くらい放置。このときは、初めから§5のやり方で進めていた。
  4. 2017年7月1日: 作成再開。「13日の金曜日は多く、31日の水曜日は珍しい」と改題。最初から書き直し、まず算数的な§1~§4のやり方を紹介。
  5. 2017年7月22日: 最初の下書き完了。2017年8月20日ごろ公開予定。
  6. 2017年7月23日: パブリックドメイン画像を挿入。
  7. 2017年7月28日: 「13日は金曜になりやすく31日は水曜になりにくい」と改題。
  8. 2017年7月30日: 記事のアルファ版公開。
  9. 2017年8月2日: 表7を追加。
  10. 2017年8月6日: 記事のベータ版公開。
  11. 2017年8月12日: ベータ版(その2)公開。§4に年の書き間違いがあったのを修正。
  12. 2017年8月14日: §5の非自明統計に別解1・別解2を追加。
  13. 2017年8月15日: §5の h の記述でαとβを書き間違えていたのを修正。非自明統計の構成を変更して、別解2の方法をメインにした。
  14. 2017年8月17日: 問題7の別解を追加。
  15. 2017年8月18日: 非自明統計の構成を元に戻した。§5に付録追加。
  16. 2017年8月20日: ベータ版(その3)公開。
  17. 2017年8月24日: §5の付録を記事末尾に移動、付録Aとした。付録B「回帰年 vs. 春分の間隔」を追加。
  18. 2017年8月25日: 「回帰年 vs. 春分の間隔」をやめて「1万年後の回帰年の長さの計算」を付録とした。
  19. 2017年8月26日: 「1万年後の回帰年~」→「西暦10000年の回帰年~」の計算に変更(約8000年後)。
  20. 2017年8月27日: ベータ版(その4)公開。
  21. 2017年8月30日: 付録B「春分の間隔 vs. 回帰年」を復活させた。
  22. 2017年9月1日: 結局、付録B「春分の間隔 vs. 回帰年」と付録C「西暦10000年の回帰年の長さ」を削除。付録Aだけ残した。
  23. 2017年9月3日: 初版公開。
  24. 2017年9月10日: 付録Aの y の式において、σ−1(π(u)) と σ−2(μ(u)) をそれぞれ π(σ−1(u)) と μ(σ−2(u)) に変えた。値は同じだが、その方が意味が明確。

この記事のURL

パブリックドメイン



アドレス = 英語の「クリスマス」の最初の5文字 + アットマーク + faireal.net