皆さんはサマーウォーズ*1という細田守監督のアニメ作品をご存知でしょうか?
もうかれこれ10年ほど前の作品なのであまりピンと来ない方も多いかもしれませんが、その中のワンシーンで、数学の得意な主人公『健二』が、新幹線での何気ない会話で
夏希先輩の誕生日の曜日を暗算で言い当てる
というシーンがあります。
私はこのシーンが長年に渡って頭の片隅に残り続けていました。
それどうやって暗算したんだよ!
と。笑
というわけで今回は、自分の誕生日の曜日を計算する方法についてまとめてみました。
計算方法
映画では夏希先輩の生年月日が1992年7月19日と聞いて健二くんは日曜日!と即答します。夏希先輩が健二に「どうやったの?」と訊くと、「モジュロ演算を使った」と答えます。パッと聞くとなんだか難しそうな印象を受けますが、この発言に関しては、実は相当単純なことを言っています。
モジュロ演算とは
ただの余りの計算のことです。自然数の範囲内での割り算は、
$$被除数÷除数=商…余り$$
例えば、
$$5 ÷ 2=2…1$$
のようになりますが、この余りを算出するのがモジュロ演算です。そして演算子としては”÷”とか”×”と同じ様に”mod”を使います。例えば、
$$5 ~mod~ 2=1$$
$$8 ~mod~ 3=2$$
$$12 ~mod~ 4=0$$
と言った具合になります。
でも健二くん、「モジュロ演算を使った」ってこれだけじゃどうやって曜日を導いたのか全然わからないぞ!!笑
ツェラーの公式
健二くんが説明不足なので色々調べてみると、誕生日の曜日を算出する公式としては、ツェラーの公式*2というものが存在することがわかりました。
求めたい誕生日の日付を西暦\(y\)年\(m\)月\(d\)日とすると、
$$h=\biggl\{d+\biggl\lfloor \frac{26(m+1)}{10} \biggr\rfloor+Y+\biggl\lfloor\frac{Y}{4}\biggr\rfloor+Γ\biggr\}~mod~7$$
$$Γ=\begin{cases}-2C+\biggl\lfloor\frac{C}{4}\biggr\rfloor ~~~:Gregorian(1582≦y)\\-C+5~~~~~~~~~:Julian(4≦y≦1582)\end{cases}$$
$$C=\biggl\lfloor\frac{y}{100}\biggr\rfloor$$
$$Y=y~mod~100$$
但し、1月,2月は前年の13月,14月と置き換える。
(例えば1992年1月1日ならばy=1991,m=13,d=1とする。)
※\(\lfloor X\rfloor\)は床関数と言い、\(X\)を超えない最大の整数のこと。
例えば\(X=2.2\)ならば、\(\lfloor X\rfloor=2\)。要するに小数点以下を切り捨てて整数にするということ。
得られた\(h\)を下表に当てはめて、曜日を導く。
確かにこの式に当てはめると曜日が導けるのですが、式が長く煩雑で面倒です。これでは計算する気も起きませんのでもう少し簡単な方法を考えます。
もっと簡単な方法
ツェラーの公式が煩雑となっている理由は、閏年の条件が異なるユリウス暦(1582以前)とグレゴリオ暦(1582以降) を含めて西暦4年以降全ての日付で演算できる様に一般化されているためです。今この世に生きている人の誕生日の曜日を計算するだけならば、1900以降くらいの日付で計算出来れば良いので、ツェラーの公式をもっと狭い範囲に限定して特殊化した公式を考えました。
ツェラーの公式 期間限定ver.(条件:1901~2099年)
$$h=\biggl\{(20-y’)+y”+\biggl\lfloor\frac{y”}{4}\biggr\rfloor+\biggl\lfloor \frac{26(m+1)}{10} \biggr\rfloor+d\biggr\}~mod~7$$
$$\begin{cases}y’=yの上二桁~~(y=1992ならy’=19) \\y”=yの下二桁~~(y=1992ならy”=92)\end{cases}$$
但し、1月,2月は前年の13月,14月と置き換える。
(例えば1992年1月1日ならばy=1991,m=13,d=1とする。)
これで少しスッキリしました。実際に夏希先輩の生年月日1992/7/19を当てはめると、\(h=1\)となり日曜日ということが導けます。みなさんもここに生年月日を代入して計算してみてください、自分の誕生日の曜日がわかります。
この式は筆者のえびかずき自身が導いた式なので、どこのサイトにも記載されていないと思います。
健二くんのように暗算するには?
上の公式なら紙とペンがあれば計算できそうですが、暗算するには少しだけ複雑です(テレビの東大王とかに出てくるような人なら出来るかもしれませんが笑)。ここでは健二くんのように暗算で曜日を即答できるようになる方法について書きます。結論から言うと、ちょっとした訓練が必要です。
暗算するためには、式中の年の項、月の項、日の項これら3つそれぞれのmod 7を即座に思い浮かべることができるかどうかにかかっています。
ステップ①年の項
$$\biggl\{(20-y’)+y”+\biggl\lfloor\frac{y”}{4}\biggr\rfloor\biggr\}~mod~7$$
この年の項は3つの項の中で最も難易度が高いです。単純に頭の中で足し算して計算しましょう。
(例:y=1992ならば (1+92+23)mod7 =4 )
ステップ②月の項
$$\biggl\lfloor \frac{26(m+1)}{10} \biggr\rfloor~mod~7$$
ここは覚えてしまった方が良いでしょう。
(例:7月ならば 6)
ステップ③日の項
$$d~mod~7$$
ここは覚えると言うよりも、単純に1~31の数のmod 7を計算する方が良いです。
(例:19 mod 7 = 5)
ステップ④曜日に変換
あとはそれぞれの足し算をして最後にもう一回mod 7を演算してhを算出し、曜日へ変換すれば終了です。
これらの4ステップを頭の中で順に追えるようになれば、暗算することも可能です。
(例:(4+6+5)mod 7 = 1→日曜日)
まとめ
ツェラーの公式を単純化して誕生日の曜日を計算できる簡単な公式を得ることができました。訓練次第で暗算も可能ですので、健二くんの様に即座に誕生日の曜日を言い当てるという特殊能力を身につけて友人に披露しようと思います笑。
ここまで読んでいただけた方は自分の誕生日の曜日が知りたくなったことと思います。もちろんググれば生年月日を入力して曜日が出てくるwebサイト*3が沢山見つかりますが自分で計算してみるというのも良いものです。良ければこれを参考に計算してみてください!