为什么这个函数只返回零和一个?项目Euler JavaScript

时间:2014-01-08 15:05:43

标签: javascript

此功能适用于项目Euler#45。我想要找到的是为什么一个函数,如果我使用一个整数将工作,如果我使用一个变量来表示该整数将无法工作。换句话说,此函数的值(i)仅返回0和1.

function tri(n) {
    return (n*(n+1))/2;

}

function pent(n) {
return (n*(3*n-1))/2;
}

function hex(n) {
    return (n*(2*n-1));
}


for (i=0;i<10000;i++) {
    if (tri(i) === pent(i) && pent(i) === hex(i)) {
        console.log(tri(i));
    }
}

1 个答案:

答案 0 :(得分:2)

您只记录0和1,因为这些是这三个函数中每个函数的结果相同(0或1)的唯一数字。对于所有其他数字,这三个函数返回不同的值。

对于Project Euler问题,您不应该找到每个函数的值相同的 i 的值。您应该找到出现在所有三个序列中的值。它们不必出现在每个序列的相同点上。

解决问题的一种方法是想象从一开始就向上移动T,P和H数字列表。每个列表中的第一个值是1.现在它们是相同的,为每个列表生成另一个数字。现在值为3,5和6.从此处开始,您可以为列表生成一个新值,其当前值是所有三个中的最小值。 (如果存在平局,请随意选择一个列表。)这样,您可以一次向每个列表上移一个新值。有时您可能会生成两个T值而不会生成另一个P或H值,但这没关系。最终,即使列表长度不同,您也会遇到每个列表中最大值相同的情况。

欧拉项目的挑战和思维扩展方面是自己思考问题的方法。我还要说的是,许多问题都是经典的数论问题,有些是令人惊讶的解决方案。如果你没有学过数论,你不应该因为没有弄清楚这些而感到难过;首先得到解决方案的人是Euler和Gauss。