Když jsem na web přidával kalendář, zanesl jsem do něj všechny státní svátky. Každý rok pak do něj ručně zanesu prázdniny podle informací od Ministerstva školství, a dále také datum Velikonoc, protože je každý rok jiné. Vždycky mě zajímalo, proč to tak je a jak se to počítá. Tak vám to tady popíšu. Také jsem sem naprogramoval malou kalkulačku, s jejíž pomocí si to může spočítat každý, najdete ji úplně na konci.
Proč jsou každý rok jinak?
Velikonoce se řídí měsíčním cyklem. Každá církev to počítá trochu jinak, u nás se řídíme katolickou církví. Podle jejího výpočtu může Velikonoční neděle (což je nejdůležitější z dní Velikonočních svátků) nastat mezi 22. březnem a 25. dubnem. Klíčovým bodem je tzv. 14. nisan, podle židovské tradice, což je defacto první úplněk po té, co nastane jarní rovnodennost 21. března.
Posloupnost událostí je tedy následující – 21. března nastane jarní rovnodennost, po té nastane nejbližší následný úplněk, a nejbližší neděle po tomto úplňku je Velikonoční.
Z čeho se to počítá?
Jak vypočítat přesné datum? Musíme znát délku měsíčního cyklu. Každých 19 let nastávají úplňky tentýž den.
Dále musíme znát cyklus přestupných let. Přestupný rok nastává každé 4 roky. Pokud je však rok dělitelný 100, přestupný není (1800 ani 1900 přestupné nebyly). Pokud však je dělitelný 400, přestupný je i tak (1600 i 2000 přestupné byly, ale 2100 už zase nebude).
A nakonec musíme znát cyklus dní, abychom mohli datum vztáhnout na nejbližší neděli. To je jednoduché, dní v týdnu je 7.
Co je to “modulo”?
Znáte-li odpověď na tuto otázku, klidně přeskočte za další nadpis. S ostatními si uděláme malou odbočku do matematiky. Nebojte se, je to jednoduché.
Jistě všichni víme, že např. 7 nejde vydělit 4. Tedy, ono to jde, ale výsledek má desetiny 7:4 = 1,75. Ale také si můžeme vzpomenout na to, když jsme se učili dělit velká čísla. To nám vždycky zbyl zbytek, který jsme napsali do závorky, 7:4 = 1 (3) “sedm děleno čtyřmi je jedna, zbytek tři”.
Všimněte si, že dělení čtyřmi se zbytkem nám čísla rozdělí na čtyři skupiny. 4, 8, 12, 16… dávají zbytek nula. 5, 9, 13, 17… dávají zbytek 1; 6, 10, 14, 18… zbytek 2 a 7, 11, 15, 19 zbytek 3.
Takže když potřebujeme vědět, jakou korekci udělat pro přestupný rok, stačí nám rok vydělit 4 a vzít zbytek (pokud nebereme v potaz ty roky dělitelné 100 a 400), a ten nám přesně řekne, kolik roků jsme mimo přestupný rok, 0 let znamená, že je přestupný rok, nebo jsme 1 – 3 roky mimo!
Stejně to můžeme udělat s 19 pro měsíční cyklus. Stačí nám rok vydělit 19 a vzít zbytek. Ten bude 0 – 18, takže roky, kdy je měsíc vůči zemi stejně, budou mít vždy totéž číslo.
A nakonec to stejné uděláme se 7 a ta nám dá zbytky po dělení 0 – 6, což jsou vlastně očíslované dny v týdnu.
Takováhle operace “zbytek po dělení se zbytkem” se nazývá MODULO, a značí se jako mod nebo symbolem procenta %, podobně, jako když se dělení značí dvojtečkou : či lomítkem /.
Kupříkladu,
30 : 4 = 7 (2), tedy 30 / 4 = 7 a 30 % 4 = 2
Jak se to počítá?
Jak tedy vypočítat datum velikonoc? Stejnou otázku si položil slavný německý matematik Carl Friedrich Gauss a vyzbrojen znalostmi, které jsem popsal výše, vymyslel tento algoritmus:
nechť r je současný rok, m = 24, n = 5, a = r % 19, <- korekce úplňku b = r % 4, <- korekce přestupného roku c = r % 7, <- korekce dne v týdnu d = (19×a + m) % 30 e = (n + 2×b + 4×c + 6×d) % 7 pak Velikonoční neděle nastane (d + e) dní po 22. březnu.
Mimochodem, netuším, kde se bere to modulo 30 u proměnné d. Napadlo mě, že je to počet dní v měsíci, ale tím si nejsem moc jistý vzhledem k tomu, že březen má 31 dní a astronomický měsíc má 27 dní (kvůli tomu se úplňky cyklí jen každých 19 let). Výpočet proměnných d a e je prostě bohužel složitost, aby to do sebe matematicky zapadlo.
Zajímavé je, že s největší pravděpodobností datum Velikonoční neděle padne na 19. duben. Kalendáře jsou prostě divné. Tady je obrázek z wikipedie, někdo vypočítal 5,7 milionu datumů Velikonoc a sestavil je do grafu. Jednotlivé sloupečky jsou jednotlivé dny, a čím vyšší je sloupeček, tím častěji nastala tento den Velikonoční neděle:
Ještě vyjasním, jak se výpočet vypořádá s tím, že každých 100 let není přestupný rok, ale každých 400 let ano. Klíčové jsou proměnné m & n. Ty se mění. Například mezi lety 1900 – 2099 jsou nastaveny tak, jak je uvedeno výše. I pro ně Gauss vymyslel výpočet:
nechť r je současný rok, k = r / 100 <- století (defacto) p = (13 + 8×k) / 25 q = k / 4 <- čtyřsetletí pak m = (15 + k - p - q) % 30 n = (4 + k - q) % 7
Znakem lomeno / tady myslíme dělení, jako výše, takže výsledek se zaokrouhlí dolů (7 / 4 = 1). Tím, že zaokrouhlíme dolů, tak proměnná k se o jedničku zvýší každých sto let, proměnná q každých čtyři sta let. Opět, zbytek výpočtu jsou nějaké složitosti, aby to do sebe zapadlo.
Kalkulačka
No, a to je všechno. Takhle si může vypočítat den Velikonoc každý. Nechce se vám? Napsal jsem malou kalkulačku, stačí zadat rok: