Easter

天文算法6

第八章 复活节日 Date of Easter

对西方的节日没有多少了解,这里就直接给出书中的算法吧~

1. 格里历复活节算法

\begin{array}{l|ccc} 被除数 & 除数 & 商 & 余数 \\
\hline 年份y & 19 & - & a \\
年份y & 100 & b & c \\
b & 4 & d & e \\
b+8 & 25 & f & - \\
b-f+1 & 3 & g & - \\
19a+b-d-g+15 & 30 & - & h \\
c & 4 & i & k \\
32+2e+2i-h-k & 7 & - & l \\
a+11h+22l & 451 & m & - \\
h+l-7m+114 & 31 & n & p \\
\end{array}

得 $$n = 月份, \ p+1 = 日期$$

// Gregorian returns month and day of Easter in the Gregorian calendar.
// 格里历复活节日算法
func Gregorian(y int) (m, d int) {
	a := y % 19
	b, c := y/100, y%100
	d, e := b/4, b%4
	f := (b + 8) / 25
	g := (b - f + 1) / 3
	h := (19*a + b - d - g + 15) % 30
	i, k := c/4, c%4
	l := (32 + 2*e + 2*i - h - k) % 7
	m = (a + 11*h + 22*l) / 451
	n := h + l - 7*m + 114
	n, p := n/31, n%31
	return n, p + 1
}

2. 儒略历复活节算法

\begin{array}{l|ccc} 被除数 & 除数 & 商 & 余数 \\
\hline 年份y & 4 & - & a \\
年份y & 7 & - & b \\
年份y & 19 & - & c \\
19c+15 & 30 & - & d \\
2a+4b-d+34 & 7 & - & e \\
d+e+114 & 31 & f & g \\
\end{array}

得 $$f = 月份, \ g+1 = 日期$$

// Julian returns month and day of Easter in the Julian calendar.
// 儒略历复活节日算法
func Julian(y int) (m, d int) {
	a := y % 4
	b := y % 7
	c := y % 19
	d = (19*c + 15) % 30
	e := (2*a + 4*b - d + 34) % 7
	f := d + e + 114
	f, g := f/31, f%31
	return f, g + 1
}

相关

下一页
上一页
comments powered by Disqus