EazyChange

导航

 

今天也是明白了,编程与数学的关系。例子很简单,不过能说明问题。

如果我们优化算法只从计算机特性来考虑,那么我们的人脑也成了计算机。不要忘记数学对于算法的重要影响。

题目:

返回小于数字 N 的所有 3 或者 5 的倍数的和,N 是函数的参数。

这道题怎么写不用多说。不过看到最终的冠军获得者:

function multSilgarth(N) {
  var threes = Math.floor(--N / 3);
  var fives = Math.floor(N / 5);
  var fifteen = Math.floor(N / 15);

  return (3 * threes * (threes + 1) + 5 * fives * (fives + 1) - 15 * fifteen * (fifteen + 1)) / 2;
}

module.exports = multSilgarth;

这就是数学。

我来解析一下思路吧:

可以发现,N以内有(N-1)/3个,比如N是10吧,就有3个(3,6,9)

那么他们的和呢?

3+6+9=(1+2+3)*3;

规律很明显了。

3*(首项+末项)*项数/2;

所以把3种类型加起来,然后减去共有的15的倍数个数就行了。

 

posted on 2016-12-12 10:43  EazyChange  阅读(254)  评论(0编辑  收藏  举报