本文介绍在 JavaScript 中求解 1000 以内能被 3 或 5 整除的数字之和的两种方法。第一种采用通用的遍历方式,逐一判断并累加;第二种则利用数学等差数列公式进行优化计算。通过对比两种解法,展示了从基础逻辑到数学优化的编程思路,帮助开发者理解算法效率的差异。
问题背景与解法概述
今天在技术交流群中遇到一道题目:计算 1000 以内所有能被 3 或 5 整除的数字之和。在浏览各种解法时,我发现第二种解法非常巧妙。起初对此感到困惑,但经过深入思考并得到他人指点后,顿时豁然开朗。

常规遍历解法
第一种解法很普遍,就是将1000以内的数都遍历一遍,只要有整除3或者整除5的数,就将其加起来,最终得到一个总的和。
基于等差数列的优化解法
令我感兴趣的是第二种解法,它巧妙地利用了数学中的等差数列性质来简化计算过程。
对于一个公差为 d 的等差数列,其前 n 项的和 S_n 可以通过公式 S_n = n/2 * (a_1 + a_n) 计算得出。

第二种方法的第一步利用了公式 (a_1 + a_n) / 2 * n。以能被 3 整除的数为例,计算式转化为 3 * (1 + 333) * 333 / 2。这一步骤直接计算出了 1000 以内所有能被 3 整除的数字之和。
同理,使用 sum(Math.floor((input - 1) / 5)) * 5 可以计算出 1000 以内所有能被 5 整除的数字之和。然而,由于部分数字(如 15)既能被 3 整除也能被 5 整除,它们在上述两次计算中被重复累加。因此,需要减去这些重复计算的数字之和(即能被 15 整除的数字之和),从而得到 1000 以内能被 3 或 5 整除的数字最终总和。
关于使用 JavaScript 实现求解 1000 以内被 3 或 5 整除的数字之和的内容就介绍到这里,希望上述两种解法能对大家有所帮助!