Project Euler 28
Project Euler 28
题目
Number spiral diagonals
Starting with the number \(1\) and moving to the right in a clockwise direction a \(5\) by \(5\) spiral is formed as follows:
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
It can be verified that the sum of the numbers on the diagonals is \(101\). What is the sum of the numbers on the diagonals in a \(1001\) by \(1001\) spiral formed in the same way?
解决方案
容易观察到,从里面向外,每一个圈都会比里面的一个圈多\(8\)个元素。(以上图为例,第\(1\)个圈为\(1\),第\(2\)个圈为\(2\sim9\),第\(3\)个圈为\(10\sim25\))。
因此,在第\(n\)个圈中,四个角上的数可以分别用一个二次多项式\(p(n)=an^2+bn+c\)来定义这个通项公式。
这里不再详细计算。
通过OEIS查询,可以发现:
右下角的通项公式为A054554,\(4n^2-10n+7\);
左下角的通项公式为A053755,\(4(n-1)^2+1\);
左上角的通项公式为A054569,\(4n^2-6n+3\);
右上角的通项公式为\((2n-1)^2\).
因此可以直接取所有值相加。
也可以再用平方和公式进一步导出结果:\(\dfrac{2}{3}(8n^3-9n^2+7n)-3\)
代码
NOTE: 本代码只适用于矩阵大小为奇数时的情况。
1 | N = 1001 |
1 | N = 1001 |