e61023公式や表を使わず、何も覚えていない状態で、手軽に任意の年月日の曜日を暗算。前提ユリウス暦では、4で割り切れる年は常にうるう年。400で割り切れればうるう年、そうでなければ平年。2000年には2月29日があるが、1900年や2100年の2月は28日まで。ユリウス暦では、1世紀につき、うるう年が25回入る。グレゴリオ暦では、うるう年が25回入るとき(ユリウス世紀)と、24回のとき(短い世紀)があり、400年ごとに前者が1回、後者が3回。以下の三つは、落ち着いて考えればどれも当たり前のことであり、一度仕組みを理解すれば、無理に記憶しなくても、いつでも頭の中で再構成できる。基礎1平年の1年(365日)ごとに、曜日は1個前進。ある年の5月5日が日曜日なら、翌年の5月5日は月曜日。その場で暗算できる(7の倍数は無視していい)。同様に、うるう年の1年(366日)なら、曜日は2個前進。基礎24年を1周期とすると、平年3+うるう年1の通常の1周期では、曜日は2個後退。あり、曜日が元に戻る。グレゴリオ暦には、まれに通常ではない周期(4年連続平年)もある。「XX00年2月末日」をまたぐ曜日計算をしない限り、そのことは問題にならない(以下では、またがないように切り分けるので問題なし)。基礎31ユリウス世紀(通常の周期25回)では、曜日は1個後退。短い世紀では、1日少ないので、曜日は2個後退。400年ごとに曜日パターンは循環。最初に3月1日の曜日を考える。任意の年の3月1日の曜日が分かれば、任意の日付の曜日は簡単に分かる(「計算の後半」参照)。「原点」として、2000年3月1日は水曜日。覚え方は、「ミレニアムで浮かれて水商売が儲かった」または「21世紀は水瓶座の時代」。原点の曜日を忘れてしまっても、今日の日付と曜日が分かれば、以下の4ステップを逆順に適用することにより、基準の曜日をその場で求めることができる。ステップ1基礎3から、+100年ごとに、ユリウス世紀なら曜日は1個後退し、長い世紀なら曜日は2個後退する(−100年なら、それぞれ1個・2個前進)。(この範囲外の年についても、400の倍数を加減すればこの範囲に帰着できる。y」で置き換えて構わない。実際上は、28・56・84のどれかを適宜引き算すればいい。第1項は基礎2、第2項は基礎1による。2000年3月1日(基準日)は水曜なので、2050年3月1日は火曜日と分かる。大の月が1個経過するごとに曜日が3個前進する。小の月(月の日数が30)なら、曜日の前進量はそれより1小さい。「小の月が何回挟まったか?」で、期間に含まれる「4・6・9・11月30日」の回数。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日との曜日差だけを通算しても構わない。基礎3より1945年と同じ。基礎2より、それは1917年と同じ。1900年3月1日は木曜日。−1、1917年3月1日は、それプラス1で木曜日のまま。2222年2月22日2200年3月1日は土曜日。−3、2221年3月1日はそれプラス1なので木曜日。9999年9月9日8000を引いて1999年9月9日と同じ。1999年は84を引いた1915年と同じ。1900年3月1日は木曜日。+3、合わせて月曜日。2000年3月1日は水曜日。1999年3月1日は366日前なので月曜日(基礎1のリバース)。結びもう少しだけ複雑でトリッキーな方法を使うと、任意の日付の曜日を数秒以内に言えるようになる。それに比べると上述の方法は少し時間がかかるが、その分、アルゴリズムが単純明快で、ほとんど何も覚える必要がない(メモリー消費量が小さい)。この方法でも、ゆっくり考えて数分以内、慣れれば10秒くらいで曜日が分かるだろう。ある意味、トリッキーな速算より素直で良い。上記の手順はグレゴリオ暦専用だが、少し変えるだけでユリウス暦にも対応できる。この計算法は、もともと別の話題(グレゴリオ暦での曜日の分布)の土台として考えたものだが、それ自体としても実用性がありそうなので、独立した記事とした。...のような気がするが、現実は奇妙なもの。「毎月1日の曜日」「13日の曜日」のように「特定の日にちが何曜になるか」を考えると、現在の暦(グレゴリオ暦)では曜日分布に偏りがある。原因は:グレゴリオ暦では、400年につき97回うるう年がある。これは7の倍数だから、全ての日は、その400年後の日と曜日が同じ。「○月1日」という日付は、1年に12回。4800回を周期に同じパターンの繰り返し。4800は7で割り切れないから、周期ごとに「7種の曜日が同じ数」ということは不可能!「1~28日」のどの日付についても、そうなる。「29~31日」については別に考える必要があるが、結論から言うと、グレゴリオ暦ではどの日付も曜日が不均等。13日・金曜日は400年につき688回も発生し、迷信深い人を震え上がらせる。対照的に、13日・土曜日は684回しかない。30日・月曜日は631回あるが、30日・火曜日は626回。様子を見るために、1年分だけを取り出して考えてみよう。2017年1月1日は、日曜である。2017年の1年間における、毎月1日の曜日の分布はどうなるか。1月は31日あるから、1月1日→2月1日で曜日は31個前進。置き換えて構わない(31から「7の倍数28」を引き算)。曜日が31個前進することは、曜日が3個前進することと同じ意味。1月1日が日曜なら、2月1日の曜日はその3個先=水曜。同様に考えると、「ある月の1日の曜日」を基準にした場合、その月の日数が30か31かに応じて「翌月の1日の曜日」は2または3前進する。その月が2月の場合には、月の日数が28か29かに応じて、0または1前進する(「0前進」の場合、2月1日と3月1日が同じ曜日)。5A欄は、各月の日数。B欄は、それを7で割った余りで、Aマイナス28に等しい。この値は、「その月の1日→翌月1日で、曜日が何個前進するか」を表している。C欄の初期値「0」は「1月1日が日曜」という意味。曜日番号なので、7以上になったら7を引く(例えば、曜日番号8は曜日番号1と同じ意味)。アスタリスクの場所で、この「7を引く処理」が行われている。12月のA欄・B欄の丸括弧内の値は、ここでは必要ない(翌1月のC欄の計算に必要なデータだが、それは計算範囲外なので)。C欄全体を見ると「0」(日曜)が2回現れ、1月1日と10月1日が日曜になることが分かる。「1」(月曜)は1回しかない(5月1日)。2)...と書き表すことにする(左端の成分が、日曜日の回数)。「毎月1日」についてのデータだが、それと曜日が等しい「毎月8日」なども同じこと。2回...となるのだから、曜日の頻度は次のようになる(左端の成分が、日曜日の回数)。左から2個目の成分は同じ値。他の曜日についても同様。「成分を右に1個ずつずらす。対して1・2・3...回リングシフトを行ったものに等しい。4年間の曜日の分布もう少しだけ長い期間を考えてみよう。2017年1月1日は、日曜である。2017~2020年の4年間に48回ある「毎月1日」の曜日の分布はどうなるか。2017年は365日あり、365を7で割ると1余るのだから、翌2018年には、全部の日付について、2017年と比べて曜日が1個ずつ前進する。2018年1月1日は月曜。問題2の解となっていた(和は、成分ごとに足したもの)。いう4年間における、毎月1日の曜日分布を表している。置き換える必要がある。同様に2020年の表を作り、手動で曜日をカウントしておく。2表3は表2と同じようなものだが、2月のA欄・B欄が1大きく、C欄の初期値が「3」になっている。表2と同様、前月のB欄とC欄の和がその月のC欄(7以上の場合、7を引く)。「ウェット」、つまり「潤い」(うるう年)が含まれる4年間の統計に当たる。うるう年」という4年間における、毎月1日の曜日分布を表している(左端の要素が日曜日の数)。...この記事では「2月29日が1回もない4年間」をドライと呼び、「2月29日が1回含まれる4年間」をウェットと呼ぶ。ユリウス暦の4年間(1月1日→4年目の12月31日)は常にウェットだが、グレゴリオ暦(現行のカレンダー)では、ドライな4年間も存在する(詳細は後述)。2バージョンに分かれてしまったり、すっきりしない感じだが、とりあえずこのまま進めてみましょう...。28年間の曜日の分布4年単位のことは分かったので、4年×7回を考えてみる。2017~2045年の28年間における「毎月1日」の曜日の分布はどうなるか。ところで、平年の日数365を7で割った余りは1。うるう年の日数366を7で割った余りは2。