さて、この問題を考える前に、簡単に現在使用されている暦(グレゴリオ暦)について知っておく必要があります。そのあとは、かなり数学的な説明になりますので、「まあこんなものもあるのかぁー」くらいに読み飛ばして下さい。
【グレゴリオ暦について】
現在使用されている暦以前は、西暦紀元前45年にローマのユリウス・シーザー(「ブルータスお前もか」でご存知の人)が採用したユリウス暦が有名ですが、16世紀頃になると11日もずれてしまいました。これを危惧した、当時のローマ法王グレゴリオ13世は、今後このようなずれが起らないように暦法を改定しました。これが現在使用されているグレゴリオ暦です。当暦はいわゆる太陽暦で、簡単にいえば地球が太陽の周囲を1周する時間を1年とするもの(これを1回帰年という)です。しかし、その時間が365日+5時間48分46秒であるため、1年を365日とした場合、毎年0.2421991日ずれてしまうことになります。そこで、グレゴリオ13世は以下の@〜Bの規則を設け、修正を加えました。
@ 1582年10月4日(木)の次の日を10月15日(金)としてユリウス暦のくるいを修正する。
A 西暦年数が4で割れる年をうるう(閏)年とする。
B Aについて、100で割れて400で割れない年は平年とする。(要するにうるう年とはしない。)
この修正によって、3000年で0.9日しかずれない、素晴らしい暦が完成したのです。
ローマ(イタリア)では前述のように、1582年から当暦を使用していましたが、キリスト教とともに広まり、世界的に使用されるようになったのは第1次世界大戦以降であるといわれています。日本においては、明治5年(1872年)11月9日に、「同年12月3日を明治6年1月1日とする」という改暦の布告が出され、太陽暦を採用することになりました。
【曜日計算公式の仕組みについて】
前述の@を出発点とすると、1900年の1月1日は月曜日となります。同時にこれを1900年代の各日の曜日計算の基本とするわけです。但し、Bより、1900年はうるう年ではありませんので、ここに留意する必要があります。
それでは基礎知識ができたところで公式の説明に入ります。
【1】1月1日の曜日から、それ以降の各月初日の曜日の算出方法を説明します。
月を変数M、1月1日の曜日からのずれを変数M'(えむだっしゅ)と置きましょう。
すなわちM=1〜12、M'=0〜6(M'=7は、ずれがないことになるのでM'=0となる。)(M、M'は整数)
すると下の表1(平年)表2(うるう年)のようなものが出来上がります。
ここでMOD 7とはある整数を7で割ったときの余りを表しています。
表1(平年用)右端のM'=1であることから、翌年の1月1日は曜日が1だけ進むことになる。
M(月) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 |
その月の日数 | 31 | 28 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 | 31 |
MOD 7(日数を7で割ったときの余り) | 3 | 0 | 3 | 2 | 3 | 2 | 3 | 3 | 2 | 3 | 2 | 3 | |
M'(1月1日の曜日からのずれ) | 0 | 3 | 3 | 6 | 1 | 4 | 6 | 2 | 5 | 0 | 3 | 5 | 1 |
表2(うるう年用)右端のM'=2であることから、翌年の1月1日は曜日が2だけ進むことになる。
M(月) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 |
その月の日数 | 31 | 29 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 | 31 |
MOD 7(日数を7で割ったときの余り) | 3 | 1 | 3 | 2 | 3 | 2 | 3 | 3 | 2 | 3 | 2 | 3 | |
M'(1月1日の曜日からのずれ) | 0 | 3 | 4 | 0 | 2 | 5 | 0 | 3 | 6 | 1 | 4 | 6 | 2 |
すなわち、1月1日の曜日が分かれば、それ以降の曜日は簡単に求まるのです。
例; 今年の場合、平年なので表1を使用し、1月1日が水曜日なので、2月1日は3ずれるから土曜日、6月1日は4ずれるから日曜日、10月1日は、ずれないから水曜日などとなります。
ここで、表1と表2の違いは、Mが3〜12(3月から12月)について、表2のM'は表1のM'+1であることがお分かりでしょう。逆にMが1と2のときについては同じになるため、うるう年について1月と2月は特別に考える必要があります。
【2】次に1900年代の公式を説明します。
1900+X年M月N日の曜日は;X+[X/4]+M'+N曹x(MOD 7)・・・@
ここで、[X/4]はX/4の整数部分で、Mが3〜12(3月から12月)について、表2のM'が表1のM'+1であることを意味するの補正値です。
また、曹x(MOD 7)とはX+[X/4]+M'+Nを7で割ったときの余りのことです。
@の式で算出されたYの値に応じて表3によって曜日を求めることが出来ます。
表3(曜日を求める表)
@式で算出したY | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
下の月以外の月 | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
うるう年の1,2月 | 土 | 日 | 月 | 火 | 水 | 木 | 金 |
例;私がHPを作った日の1997年2月7日は何曜日でしょうか。
X [X/4] + M' + N Y
97 + 24 + 3 + 7 = 131 5 (MOD 7)
よって表3より金曜日ということになります。
あなたの誕生日の曜日や家族の記念日など、色々と計算してみて下さいね!!
【3】さて最後に2000年代の公式を説明します。
2000年はグレゴリオ暦の暦法からうるう年であることはお分かりいただけましたね?
すなわち、式@において、1900+XのX=100として計算してもなんら問題のないことにお気づきでしょう。要するに、Xを99を超えて199までそのまま続けてると考えても差し支えないのです。
しかしながら、Xが3桁になると式@の計算も面倒くさくなるので(パソコンや計算機にやらせればそんなこともないのですが)Xを下2桁にする工夫をしてみましょう。
2000≦Z<2100のとき、Z=1900+100+Xとすると、Xが下2桁になります。ここで、1006 (mod 7)ですから、2000年代の下2桁Xについて式@を用いた場合、6を加えてからYの値を求めればよいことになります。
例;2000年1月1日は何曜日でしょうか。
X [X/4] + M' + N Y
00 + 0 + 0 + 1 + 6 = 7 0 (MOD 7)
よって表3よりうるう年のところを見て土曜日ということになります。
目次に戻る