JavaScript算法性能 - 计算可被k整除的范围内的数字数

use*_*735 1 javascript algorithm performance loops time-complexity

我创建了一个算法,用于查找范围内可被第三个数字k整除的数字.我得到了这个工作,但在多项式时间而不是线性时间

function divisibleCount(x, y, k) {
    var count = 0;
    for (var i = x; i <= y; i++) {
        if (i % k === 0) {
            count++;
        }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

论点如下

x: Start of range
y: End of range
K: Number is divisible by
Run Code Online (Sandbox Code Playgroud)

问题肯定是for循环,这使得这个多项式时间.

我试图用

for (var i = x; i <= k; i += k)
Run Code Online (Sandbox Code Playgroud)

但得到了错误的答案.

有什么方法可以改善这个吗?

A. *_*esa 6

O(1).

像这样的东西:

Math.floor((y-1) / k) - Math.floor((x-1) / k)
Run Code Online (Sandbox Code Playgroud)

说明:

Math.floor((x-1)/ k)是在间隔之前可被k整除的数字的数量.

Math.floor((y-1)/ k)是可以被k整除的数字,直到间隔结束.

应该是正数,k> 0.希望;)

编辑:我明白了,你想在范围中包含y.好的,然后改为:

Math.floor(y / k) - Math.floor((x-1) / k)
Run Code Online (Sandbox Code Playgroud)

这是作业吗?我感到有点内疚.

  • @senderle 1.我不是OP 2. OPs参考实现表示一个范围为`[x; Y]` (2认同)