AI画像を再編集

人前で披露できる「頭で曜日を計算する方法」を紹介します(グレゴリオ暦)

まず、グレゴリオ暦は、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 で割った余りの計算

  1. 日 28
  2. 月のコード10月: 0
  3. 年の下2桁(2026年):26
  4. 年の下2桁 ÷ 4(小数点以下切り捨て):26÷4 = 6.5 で 6
  5. 世紀のコード(2000年代): 6

すべての数値を足し合わせます

28 + 0 + 26 + 6 + 6 = 66

この合計を 7で割ります

66 ÷7 = 9.4285で余り4

ここで余りと曜日の照合

出てきた余り4を曜日に変換します。

0 = 土
1 = 日
2 = 月
3 = 火
4 = 水

したがって、2026年10月28日は「水曜日」となります!

ゆうくんが曜日を当てたのは、この計算式を暗算して答えていたんだね