为什么这个函数只返回零和一?Project Euler 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));
}
}

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

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

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

Project Euler的挑战性和拓展思维的方面是自己思考解决问题的方法。我还将强调,许多问题都是经典的数论问题,有些问题有令人惊讶的解决方案。如果你没有学习过数论,你不应该因为没有弄清楚这些而感到难过;最先得到答案的是像欧拉和高斯这样的人。

最新更新