불규칙한 요일이 문제
지난 글에서 율리우스력에 대해 살펴보았는데, 이 역법은 정밀하기는 하지만 한 달의 날수가 제각각이어서 요일이 너무 불규칙하게 변한다. 여기에 그레고리력의 윤년 계산까지 더해지면 날짜만 보고 요일을 알아내는 것은 더욱 힘든 일이 된다. 이 때문에 날짜와 요일을 고정하는 새로운 역법을 고안하기도 하였지만, 실제로 사용하기는 어렵다. 어차피 이제 와서 바꾸기도 어렵고. 이런 이유로 사람들은 날짜로부터 요일을 계산해 내는 공식을 만들기 위해 각양각색의 아이디어를 내었다.
가장 알기 쉬운 방법은 주어진 날짜가 오늘로부터 며칠 뒤인지를 일일이 세는 것이다. 예를 들어, 2012년 12월19일이 무슨 요일인지 알아보자. 오늘이 2010년 2월 16일 화요일이니, 일단 2012년 2월 16일까지는 꼭 2×365=730일이 걸린다. 다시 한 달 뒤인 3월 16일까지는 28일을 더해야 하는데, 2012년 2월이 윤달이므로, 다시 하루를 더하여 730+29=759일. 12월까지는 아홉 달이 더 지나야 하므로, 759+31+30+31+30+31+31+30+31+30=1034일이 지나면 12월 16일이 된다. 여기서 사흘이 더 지나면 되니까, 2012년 12월 19일은 오늘로부터 1037일이 지난 날짜이다. 요일은 7일마다 반복되고 1006을 7로 나누면 1가 남으니까, 화요일로부터 하루가 지나면 수요일이 된다. 네이버의 달력 사이트를 이용하면 수요일임을 확인할 수 있다.
물론 이런 계산을 정말로 일일이 다 할 필요는 없고, 중간마다 7로 나눈 나머지를 사용하는 것이 훨씬 경제적이다. 예를 들어, 1년의 날수 365는 7로 나누어 1이 남으니까, 윤달이 끼지 않는 한 1년 후 같은 날짜의 요일은 항상 하루 뒤가 된다.
요일을 계산하는 첼러의 공식
원리적으로는 분명히 앞서 설명한 대로 계산하면 되지만, 아무래도 너무 불편하다. 게다가 불규칙하게 나타나는 30과 31을 반복해서 더하기도 쉽지 않다. 이런 사람들을 위하여 독일의 수학자 첼러(Julius Christian Johannes Zeller, 1822-1899)는 년, 월, 일을 대입하면 그 날짜의 요일을 바로 알 수 있는 다음과 같은 공식을 만들었다.
이 공식에서 q는 일, m은 월, K는 연도의 마지막 두 자리 수, J는 연도의 앞 두 자리 수이다. 또, 기호 [ ]는 그 수를 넘지 않는 최대의 정수를 뜻한다. 마지막의 mod 7은 7로 나눈 나머지를 구하라는 뜻이다. 이 계산 결과, h=1이면 일요일, h=2이면 월요일, …, h=6이면 금요일, h=0이면 토요일이 된다.
이 공식을 사용할 때는 주의할 점이 있다. 요일 계산에서 언제나 문제가 되는 것은 윤달인 2월로, 한 해의 첫 달도 아니고 마지막 달도 아닌 이상한 위치에 있기 때문이다. 이런 이유로, 위의 공식에서 1월과 2월은 그 앞 해의 13월과 14월로 생각한다. 앞서 살펴보았던 2012년 12월 19일을 다시 계산해 보면, q=19, m=12, K=12, J=20이므로 다음과 같이 되고,
이 값을 7로 나누면 4가 남는다. 따라서 일월화수목금토의 네 번째 요일인 수요일이 된다. 앞서 일일이 세는 방법보다 크게 나아 보이지 않지만, 그래도 꽤 쓸모가 있는 공식이다. 특히, 지금과 연도의 차이가 큰 경우는 아무래도 이런 공식을 쓰는 쪽이 오류가 생길 가능성이 작다. 그리고 무엇보다 컴퓨터 프로그램으로 구현하기가 쉽다는 점이 큰 장점이다. 그렇지만 이 방법으로는 도저히 콘웨이 교수의 컴퓨터를 사용할 수가 없다. 더 빠른 방법은 없을까? |