转载翻译自https://www.divye.in/2012/07/how-do-you-determine-if-number-n-is.html
作者:Divye
就在昨天,我决定在欧拉计划上解决一些问题.我已经很久没去过这个网站了,但是我很高兴因为我很快解决了Problem 19和Problem 43,可是Problem 44让我暂时停了下来。这个问题是用五边形数来描述的,在研究它的过程中,我得到了一个有趣的结论来和大家分享,关于“怎么有效判断一个数是一个五边形数?”
回顾一下,五边形数是一个可以用公式表示的数 N,其中n一个自然数。当去测试N是不是五边形数时,我们需要做的就是处理这个等式: 这是一个很简单的二次方程,当n是自然数也容易验证N是不是五边形数。当N是很小时,人很容易去计算验证,但是编程语言并不擅长处理二次方程,所以我们需要对二次方做一些预处理。
简化上述方程,我们得到:
它的根是:
让我们分析第一个根:
现在,由于n是一个自然数,1+sqrt(1+24N)应该被6整除。使用更多的数学符号可表示为,
(注:这里我使用的是数学符号mod,而不是CS中的mod。末尾的mod 6作用于方程的两侧)
简单的分析表明,
只要检查上述情况就足以确定数字 N 是否是的非广义的五边形数。但是我们能做得更好吗?
众所周知,模算术有下列性质:
or,
or,
or,
无论 N 为何值,上述性质始终正确。因此,如果一个数字是五边形数,唯一的限制就是1+24 N必须是一个完全平方数。但是,我们已经使用了方程两边平方来把映射到 - 此映射不是 1对1的,因为一个完全平方数可能在 mod 6 空间中有多个根(事实上, 有两个不同的根 和 )。这意味着这个条件实际上是必要不充分的。
1 + 24 N 是一个完全平方数但,上述二次方程是正确的,但它们不是"normal"的五边形数。快速浏览一下就会发现,当二次方程的根代入公式(
应该指的是 ?)时,有(注意 - 号)的数将始终产生 的值,从而保证 n 的整体值(虽然符号为负)。
换句话说,如果 1+24 N 是一个完全平方数,要么
or
因此,只要1+24 N是一个完全平方数,我们总会得到一个n(不一定有效)。
因此,在所有情况下,一个数字是否是广义的五边形数的充分必要条件是 1+24 N 是一个完全平方数。如果你想检验一个数字是不是非广义的五边形数,还应该代入检验.QED.
注:这篇文章的前一个版本声称,更简单的测试是必要的,足以为非广义的五边形数。分析存在缺陷,帖子已更新,表明更简单的测试仅适用于广义的五边形数。非常感谢戴夫 · 埃文斯通过电子邮件提供了详情。