November 14, 2023

Как вычислить день недели по дате (The day of the week)

Что они ни делают, не идут дела,
Видно в понедельник их мама родила.
(песня «Остров невезения» из кинофильма «Бриллиантовая рука»)

Пожалуй, каждый хотел бы знать, в какой день недели он родился. Это можно установить по дате рождения. А вообще, для установления дня недели по дате существуют алгоритмы. Это математическая задача, которая решается средствами модулярной арифметики, то есть арифметики остатков. Конечно, существуют и вечные календари, которые вы можете носить в кармане, и даже с голосовым интерфейсом, или онлайн калькуляторы. Далее мы расскажем о математике, заложенной в таких календарях.

Вот одна из формул для таких расчётов. Её можно вычислять вручную или составить программу. Речь идёт о расчётах в григорианском календаре (новый стиль, с 1582 года).

Вычисления проводятся по формуле:

ДН = Д + Г + [Г/4] + [С/4] – 2С + К (mod 7)

Здесь:

• ДН — определяемый день недели (0 — воскресенье, 1 — понедельник, ..., 6 — суббота);

• Д — дата (число от 1 до 31);

• Г — год в столетии (последние две цифры года в четырёхзначной записи года);

• С — столетие (первые две цифры года);

• К — месячный коэффициент (январь = 6, в високосный год 5; февраль = 2, в високосный год 1; март = 2; апрель = 5; май = 0; июнь = 3; июль = 5; август = 1; сентябрь = 4; октябрь = 6; ноябрь = 2; декабрь = 4);

• [ ] — означает целую часть числа (наибольшее целое число, не превосходящее данное число);

• (mod 7) — от правой части выражения вычисляется остаток от деления на 7.

На каких принципах основаны эти расчёты:

• каждый седьмой день месяца имеет то же название, что и предыдущий;

• обязательно учитывается високосный год.

Пример

13 ноября 2023 года — был понедельник.

Здесь: Д = 13, Г = 23, С = 20, К = 2.

Тогда: [Г/4] = 5, [С/4] = 5.

ДН = 13 + 23 + 5 + 5 – 40 + 2 = 8 = 1 (mod 7). Это точно был понедельник.

P. S. Календарный устный счёт — это одна из дисциплин на чемпионатах мира по ментальной арифметике, которые проводятся каждые два года, начиная с 2004 года. Максимально возможное количество дней недели для дат с 1600 до 2100 годы по григорианскому календарю должно быть определено в течение одной минуты. Мировой рекорд — 140 расчётов в минуту — был установлен в 2018 году.

#Лайфхаки #ДеньНедели #МодулярнаяАрифметика