Project Euler 577

Project Euler 577

题目

Counting hexagons

An equilateral triangle with integer side length $n \ge 3$ is divided into $n^2$ equilateral triangles with side length $1$ as shown in the diagram below.

The vertices of these triangles constitute a triangular lattice with $\dfrac{(n+1)(n+2)} 2$ lattice points.

Let $H(n)$ be the number of all regular hexagons that can be found by connecting $6$ of these points.

For example, $H(3)=1$, $H(6)=12$ and $H(20)=966$.

Find $\displaystyle \sum_{n=3}^{12345} H(n)$.

解决方案

通过容斥原理,不难写成$H(n)=3H(n-1)-3H(n-2)+H(n-3)+F(n)$,其中$F(n)$是恰好能够镶嵌在边长为$n$的正三角形上的正六边形个数。

并且,这些正六边形都只能镶嵌在边长为$3$的倍数的等边三角形上,如图:

这是$n=9$种不同时的情况,$3$种颜色分别代表$3$个镶嵌的三角形。那么,当$n\%3=0$时,$F(n)=\dfrac{n}{3}$,否则$F(n)=0.$

为了使得正六边形是镶嵌在边长为$n$的三角形中,那么这个正六边形中的六个顶点,逆时针顺序间隔的三个顶点分别在三角形的三条边上。假设间隔开的这三个顶点为$D,E,F$,原来的等边三角形三个顶点为$A,B,C$,那么必有$AD=BE=CF.$,然后等边三角形$DEF$每条边再向外扩展出一个顶角为$120°$的等腰三角形,那么新的三个顶点和原来的三个顶点将会形成一个正六边形。最终不难输出可以进行扩展的数量为$\dfrac{n}{3}.$

通过上面的递推式,在oeis中查找到相关序列为A011779。并且在PROG一栏发现如下信息:

1
(PARI) a(n)=1/216 * n^4 + 1/12 * n^3 + 37/72 * n^2 + [5/4, 139/108, 131/108][1+n%3] * n + [1, 10/9, 7/9][1+n%3] \\ Yurii Ivanov, Jul 06 2021

这直接给出了这个数列的通项公式,直接实现即可。

代码

1
2
3
4
5
6
N = 12345
ans = 0
for n in range(N - 2):
ans += (n ** 4 + 18 * n ** 3 + 111 * n ** 2 + [270 * n + 216, 278 * n + 240, 262 * n + 168][n % 3]) // 216
print(ans)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
Ujimatsu Chiya 微信 微信
Ujimatsu Chiya 支付宝 支付宝