
人前で披露できる「頭で曜日を計算する方法」を紹介します(グレゴリオ暦)
まず、グレゴリオ暦は、1582年にローマ教皇グレゴリウス13世が制定した太陽暦です。
平均日数:1年平均は365.2425日で、約3211年で1日のずれが生じる程度です。
たとえば、うるう年のルールでは以下のように計算されます
- 4で割り切れる年は原則としてうるう年
- 100で割り切れる年は平年(うるう年ではない年)
- 400で割り切れる年は例外的にうるう年
暗算が得意なら、以下の手順と「月のコード」「世紀のコード」を覚えることで、頭の中で曜日を導き出すことができます。
計算のステップ
曜日=(日 + 月のコード + 年の下2桁 + (年の下2桁 ÷ 4) + 世紀のコード) ÷7
(年の下2桁 ÷ 4)は小数点以下切り捨て
① 世紀のコード(西暦によって決まる数)
世紀コードは、グレゴリオ暦における400年ごとの曜日サイクルの周期性の曜日のずれ(剰余)を表したもの
つまり、曜日計算(任意の西暦年月日から曜日を割り出す方法)では、計算を簡単にするために、西暦を「世紀(上2桁)」と「年(下2桁)」に分解します。
その際、その世紀の起点となる年の基準日が何曜日であるか、あるいは何日分ずれているかを表すのが「世紀コード」です。
細かい説明は割愛しますが、例えば、2000年代のコードが「6」なのは、1900年代の「0」を基準にして100年が進み、かつグレゴリオ暦特有のうるう年(2000年が400年ぶりの大うるう年だったことなど)の調整を経た結果、7日周期の中で「6(=-1)」ぶんのオフセット(ずれ)を持つためです
世紀コード(Century Code)
西暦を YYYY とすると、上2桁を C として、Century Code=(3-(c mod 4))×2の計算式を使う
(C mod 4)
1年 = 365日
うるう年 = 366日
400年の中にうるう年は 97回
400年の総日数 = 365×400 + 97 = 146097日
146097 mod 7 = 0(ちょうど7の倍数)
つまり 400年ごとに曜日が完全にリセットされる。世紀(100年単位)の曜日ズレは 400年周期で繰り返すためC mod 4(=400年周期のどこにいるか)を使う
| 「3 − (C mod 4)」の意味 | ||
| C mod 4 | 対応する世紀 | 曜日のズレ |
| 0 | 1600年代・2000年代 | 最もズレが大きい |
| 1 | 1700年代・2100年代 | やや小さい |
| 2 | 1800年代・2200年代 | さらに小さい |
| 3 | 1900年代・2300年代 | 最も小さい |
| 最後に「×2」する理由 【この並びは 2日刻みで変化】 | ||
| 世紀 | C mod 4 | 世紀コード |
| 1900年代 | 3 | 0 |
| 2000年代 | 0 | 6 |
| 2100年代 | 1 | 4 |
| 2200年代 | 2 | 2 |
| 最後に ×2 をして「2日単位のズレ」を表現 | |||
| 西暦 | C | C mod 4 | 世紀コード |
| 1900年代 | 19 | 3 | (3−3)×2 = 0 |
| 2000年代 | 20 | 0 | (3−0)×2 = 6 |
| 2100年代 | 21 | 1 | (3−1)×2 = 4 |
| 2200年代 | 22 | 2 | (3−2)×2 = 2 |
要約するとこの「4・2・0・6」という4つの数字のサイクルを覚えておくと、過去から未来のどんな西暦の曜日でもスムーズに暗算できる
1700年代: 4
1800年代: 2
1900年代: 0
2000年代: 6 ←(ここからまたループし、2100年代は4に戻る)
2100年代: 4
② 月のコード
例えば10月が0なのはドームズデイ(基準日)が、その年の基準となる曜日(Doomsday)と全く同じ日(曜日のズレが0日)になるから
曜日計算では、その月の中で「何日が何曜日になるか」をあらかじめ固定のペア(基準日=ドームズデイ)として覚え、月コード(0〜6の数字)は、「その月の基準日が、その年の基準曜日から何日ずれているか(または、足し引きすべき数)」を表す。
月コードは「計算式」ではなく 固定の定数表
MonthCode(m) = ( sum(days[i] mod 7) for i = 1 to m-1 ) mod 7 ※ m は月番号(1〜12)
月ごとの日数が違う → 曜日がズレる
31日 → 曜日が +3 進む(31 mod 7 = 3)
30日 → 曜日が +2 進む(30 mod 7 = 2)
28日 → 曜日が +0(うるう年は +1)
29日 → 曜日が +1
つまり、
1月なら累積ゼロ → 0
2月なら「1月の31日分のズレ」 → 3
3月なら「1月+2月のズレ」 → 3
4月なら「1月+2月+3月のズレ」 → 6
このように月の開始曜日を決めるための累積ズレを mod 7 でまとめた分かりやすい式
1月: 0
2月: (31 mod 7) = 3
3月: (31 mod 7) + (28 mod 7) = 3 + 0 = 3
4月: 3 + 0 + (31 mod 7) = 3 + 0 + 3 = 6
5月: 6 + (30 mod 7) = 6 + 2 = 1
6月: 1 + (31 mod 7) = 1 + 3 = 4
7月: 4 + (30 mod 7) = 4 + 2 = 6
8月: 6 + (31 mod 7) = 6 + 3 = 2
9月: 2 + (31 mod 7) = 2 + 3 = 5
10月: 5 + (30 mod 7) = 5 + 2 = 0
11月: 0 + (31 mod 7) = 0 + 3 = 3
12月: 3 + (30 mod 7) = 3 + 2 = 5
うるう年は 1月 と 2月 の月コードを -1 する
例:2月 → 3 - 1 = 2
つまり、10月の月コードが 「0」 なのは、10月31日(ハロウィン)がその年の基準曜日と同じ日(ズレ0日)だからです。 また、このコードが「0」であるがゆえに、10月の日付から曜日を計算するときに、余計な足し算・引き算をせずにそのまま計算できるというメリットもある。
1月: 0 (※うるう年の場合は 6)
2月: 3 (※うるう年の場合は 2)
3月: 3
4月: 6
5月: 1
6月: 4
7月: 6
8月: 2
9月: 5
10月: 0
11月: 3
12月: 5
③ 導き出した「余り」と曜日の対応
計算結果の「7で割った余り」で曜日が決まります。
0 = 土曜日
1 = 日曜日
2 = 月曜日
3 = 火曜日
4 = 水曜日
5 = 木曜日
6 = 金曜日
それでは実際に計算方法を使って、2026年10月28日の曜日を実際に計算してみましょう!
計算式
曜日=(日 + 月のコード + 年の下2桁 + (年の下2桁 ÷ 4) + 世紀のコード) ÷7
各項目を当てはめた、足し算と 7 で割った余りの計算
- 日 28
- 月のコード10月: 0
- 年の下2桁(2026年):26
- 年の下2桁 ÷ 4(小数点以下切り捨て):26÷4 = 6.5 で 6
- 世紀のコード(2000年代): 6
すべての数値を足し合わせます
28 + 0 + 26 + 6 + 6 = 66
この合計を 7で割ります
66 ÷7 = 9.4285で余り4
ここで余りと曜日の照合
出てきた余り4を曜日に変換します。
0 = 土
1 = 日
2 = 月
3 = 火
4 = 水
したがって、2026年10月28日は「水曜日」となります!
ゆうくんが曜日を当てたのは、この計算式を暗算して答えていたんだね
