Jak*_*man 0 javascript for-loop
for (i = 0; i <= 1000; i++) {
if ( i % 3 === 0){
console.log(i);
}
if ( i % 5 === 0){
console.log(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我想一起添加每个输出i.i.e. 0+0+3+5+6+9+10...+1000
有没有算法来做到这一点,或者我只是开始将这些数字中的每一个加在一起?
从1到n的数字之和是
n * (n + 1) / 2
Run Code Online (Sandbox Code Playgroud)
从1到1000的可被3整除的数字1000 / 3的总和与从1到1的数字之和相乘,乘以3.类似地,可以被5整除的从1到1000的数字的总和是与从1到1的数字相同1000 / 5,乘以5.
我打赌你正在处理的问题是你要排除可被15整除的数字:)
编辑 - 为什么这样做?那么,考虑从1到n的数字的简单情况; 比如说,1比100.
1, 2, 3, 4, 5, ... 97, 98, 99, 100
Run Code Online (Sandbox Code Playgroud)
现在,考虑相同的数字列表,但倒退:
100, 99, 98, 97, ... 4, 3, 2, 1
Run Code Online (Sandbox Code Playgroud)
请注意,当我们从这两个列表中添加对时,我们总是得到101:
100 + 1 is 101
99 + 2 is 101
98 + 3 is 101
...
4 + 97 is 101
3 + 98 is 101
2 + 99 is 101
1 + 100 is 101
Run Code Online (Sandbox Code Playgroud)
所以有100个总和都是一样的,那就是101.如果我们做乘法并除以2,我们就得到了答案:)
现在,可以被3或5整除的数字总和怎么样?好吧,如果你考虑一下,这些数字是什么样的?
3, 6, 9, 12, ... 993, 996, 999
Run Code Online (Sandbox Code Playgroud)
嗯......看起来很像
3 * (1, 2, 3, 4, ... 331, 332, 333)
Run Code Online (Sandbox Code Playgroud)
所以数字1到333的总和是333 * 334 / 2,如果我们将它乘以3,我们得到1到1000之间可被3整除的数字之和.同样适用于5.如果我们想要删除数字的总和可以被3和5整除,我们计算从1到1的数字之和,1000 / 15并从结果中减去它.
哦,还有一件事.如果我们谈论的是整数的总和,我们怎么知道我们除以2的那一步不会给我们留下一小部分?嗯,公式是n * (n + 1) / 2,记住.如果n是奇数,那么n + 1是偶数.因此,乘法将总是涉及一个偶数,所以除以2将永远不会给我们留下一小部分!