Арифметика
Календарные вычисления
Ночь, которой не было: как папа украл 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 лет?
- Какие культуры используют другие календарные системы?