Арифметика

Календарные вычисления

Ночь, которой не было: как папа украл 10 дней

**4 октября 1582 года** в Испании, Португалии и Италии люди легли спать. Проснулись они **15 октября**. Десять дней просто исчезли. Это не магия - это **папа Григорий XIII** исправлял накопившуюся ошибку юлианского календаря. За 1600 лет использования старый календарь "убежал" на 10 дней: Пасха уходила всё дальше от весеннего равноденствия. Астроном **Алоизий Лилий** разработал новые правила, папа утвердил их буллой Inter gravissimas.

Мы постановили восстановить равноденствие на его законное место, с которого оно ушло примерно на 10 дней. - Булла Inter gravissimas, 1582

Григорианский календарь - одна из самых успешных реформ в истории. Его точность: ошибка в 1 день накопится за 3236 лет. Сегодня его используют почти все страны мира, хотя православные церкви до сих пор вычисляют Пасху по юлианскому.

На каком дне недели вы родились? А на каком будет ваш 100-летний юбилей? Эти вопросы кажутся требующими календаря, но математики XIX века вывели формулы, позволяющие вычислить день недели для любой даты в уме. Модульная арифметика превращает календарь в простую задачу.

  • **Планирование:** вычисление дат праздников и событий
  • **История:** определение дней недели исторических событий
  • **Программирование:** функции работы с датами

Алгоритм дня недели

**Определение дня недели** по дате - классическая задача на модульную арифметику. Ключевая идея: каждый год сдвигает день недели на 1 (или на 2 в високосный год).

**Базовые факты:** • Неделя = 7 дней • Обычный год = 365 дней = 52 недели + 1 день • Високосный год = 366 дней = 52 недели + 2 дня **Следствие:** Если 1 января - понедельник, то через год будет вторник (или среда после високосного).

Существует несколько алгоритмов: Doomsday (Конвей), Zeller's congruence, и другие. Все используют модульную арифметику.

Почему обычный год сдвигает день недели на 1?

Правила високосного года

**Високосный год** добавляет 29 февраля для компенсации того, что год длится не ровно 365 дней, а примерно 365.2422 дня.

**Григорианские правила (с 1582):** 1. Год делится на 4 → високосный 2. НО: делится на 100 → НЕ високосный 3. НО: делится на 400 → високосный **Примеры:** • 2024: ÷4 ✓ → високосный • 1900: ÷4 ✓, ÷100 ✓ → НЕ високосный • 2000: ÷4 ✓, ÷100 ✓, ÷400 ✓ → високосный

Правило трёх делений - элегантный компромисс между точностью и простотой. Ошибка в 1 день накопится только через 3200 лет.

Какой из этих годов НЕ високосный?

Юлианский и Григорианский календари

**Юлианский календарь** (45 до н.э.) использовал только правило ÷4. **Григорианский** (1582) добавил исключения для ÷100 и ÷400. Переход вызвал "исчезновение" дней.

**Юлианский календарь:** • Введён Юлием Цезарем в 45 до н.э. • Правило: год ÷ 4 → високосный • Средняя длина года: 365.25 дней • Ошибка: ~3 дня за 400 лет **Григорианский календарь:** • Введён папой Григорием XIII в 1582 • Добавлены исключения ÷100 и ÷400 • Средняя длина: 365.2425 дней • Ошибка: ~1 день за 3200 лет

Два календаря всё ещё сосуществуют: григорианский - гражданский, юлианский - в православной церкви. Для исторических дат важно указывать, какой календарь используется.

Почему Октябрьская революция (25 октября) празднуется 7 ноября?

Конгруэнция Целлера

**Конгруэнция Целлера** - формула для вычисления дня недели любой даты. Названа в честь немецкого математика Кристиана Целлера (1882).

**Формула Целлера (григорианский):** h = (q + ⌊13(m+1)/5⌋ + K + ⌊K/4⌋ + ⌊J/4⌋ - 2J) mod 7 где: • q = день месяца • m = месяц (март=3...декабрь=12, январь=13, февраль=14 предыдущего года) • K = год mod 100 (год в столетии) • J = ⌊год/100⌋ (столетие) • h = день недели (0=Сб, 1=Вс, 2=Пн...6=Пт)

Формула Целлера - классика вычислительной математики. Её часто используют на собеседованиях программистов как пример работы с модульной арифметикой.

Для вычисления дня недели нужен компьютер или таблица

Формула Целлера позволяет вычислить день недели в уме за минуту

Формула выглядит сложно, но с практикой запоминается. Ключевые шаги: сдвиг года для января/февраля, деления на 4 и 5, финальный mod 7. Многие календарные калькуляторы (и собеседования!) используют именно этот алгоритм.

Почему в формуле Целлера январь и февраль считаются 13-м и 14-м месяцами?

Ключевые идеи

  • Год сдвигает день недели на 1 (или 2 в високосный)
  • Високосный: ÷4, но не ÷100, но ÷400
  • Григорианский точнее юлианского на 3 дня за 400 лет
  • Формула Целлера: q + 13(m+1)/5 + K + K/4 + J/4 - 2J mod 7

Связанные темы

Календарные вычисления используют:

  • Модульная арифметика — Основа всех формул
  • Делимость — Правила високосных лет
  • История арифметики — Развитие календарей

Вопросы для размышления

  • Почему именно 7 дней в неделе, а не 5 или 10?
  • Как изменится календарь за следующие 1000 лет?
  • Какие культуры используют другие календарные системы?

Связанные уроки

  • alg-01
Календарные вычисления

0

1

Войти