島内さんの多くの特技の1つが, 曜日の計算であった. 年月日をいうと10秒くらいで何曜と返ってくる.
その秘法は何か. 私の推測では, 島内さんは,
m 1月 2月 3月 4月 5月 6月 7月 8月 9月10月11月12月
h 2 5 5 1 3 6 1 4 0 2 5 0
のような, 月始めの曜日の表h(m)だけを記憶していたらしい.
すると, 21世紀中の 2000+y年m月d日の曜日は, y+floor(y/4)+h(m)+d+4 mod 7 を計算するとそれが曜日になる.
やってみよう. 2011年5月25日の曜日は, 11+floor(11/4)+h(5)+25+4 = 13+3+25+4 = 45, 45 mod 7 = 3 すなわち水曜である.
だれもが知っているように, 平年ならある日の曜日は, 365 mod 7 = 1 ゆえ, 翌年は次の曜日になる. うるう日をまたぐと, 2日増える. これがyとfloor(y/4)を足す理由である.
うるう年は1月2月も2増やしてしまったが, これでは駄目なので, うるう年の1月と2月はh(m)の値から1を引く必要がある.
最後の+4は21世紀中に通用する定数で, 曜日を合わせるためのものだ. そもそもh(m)の表は全体を一斉に増やしても減らしても問題ない. 補正値をそれに応じて変えるだけである.
要はh(m)の表を覚えやすく作ることだ. 島内さんは似たような表を, おそらく無理に覚えてしまったのだろうが, 私は上の表を工夫をして書いた. mod 7を取るのだから, 7を足しても意味は変らないので, 4月を8に, 9月を7にする.
m 1月 2月 3月 4月 5月 6月 7月 8月 9月10月11月12月
h 2 5 5 8 3 6 1 4 7 2 5 0
この表で, 4月から始まる偶数の月の値は, 8, 6, 4, 2, 0である. 一方, 3月から始まる7月までの奇数の月の値は, 5, 3, 1で, その先は負になるから, 心機一転9月は7に, 11月は5にするのである.
残りは, 経験で知っているように, 2月は3月と同じ, 1月は10月と同じと覚える.
3月は5で, 4月は8の出発の値の記憶が肝心である(9月の7も?). そして2か月で2ずつ減る(2か月の間に, 通常は30日の月と31日の月があり, 30+31=61=-2 mod 7だからだ). それと世紀の定数の+4を忘れないこと.
練習問題
2000年1月1日は何曜か. (うるう年に注意)
9.11の2001年9月11日は何曜か.
来年日本で金環食が見られる2012年5月21日は何曜か.
unix timeの31ビットが立つ, 2038年1月19日は何曜か.
今年ももう年の半ばまで来た. 今年中は, 11+floor(11/4)+4=17 そのmod 7は3だから, 3+h(m)+d mod 7で計算する.
曜日に計算では, 無理に誤差をいれる島内の方法や, John Conwayの方法などが面白いが, それらはまたいずれ.
0 件のコメント:
コメントを投稿