📌  相关文章
📜  [L,R]范围内的数字计数,其中至少包含一个除以K的数字(1)

📅  最后修改于: 2023-12-03 15:13:12.110000             🧑  作者: Mango

[L, R]范围内的数字计数,其中至少包含一个除以K的数字

在程序开发中,经常会遇到需要计算区间内满足一定条件的数字个数的情况。本文介绍了一种计算[L, R]范围内,至少包含一个除以K的数字的方法。

问题描述

给定三个正整数L、R和K,计算[L, R]范围内,至少包含一个能够被K整除的数字的个数。

解法

我们可以通过计算[L, R]内被K整除的数字的数量和不被K整除的数字的数量,然后用总数减去不被K整除的数字的数量,即可得到至少包含一个除以K的数字的个数。

设[L, R]内被K整除的数字的数量为N1,不被K整除的数字数量为N2,则[L, R]范围内至少包含一个能够被K整除的数字的数量为:

N = (R/K - (L-1)/K) + (R-(R/K)*K>=K? K-((R/K)*K-L+1): 0)

其中,第一项表示[L, R]范围内被K整除的数字的数量,第二项表示[L, R]范围内末尾数字小于K的不被K整除的数字的数量。

需要注意的是,当L-1不能被K整除时,第一项的计算结果会偏小,因此需要加上一项修正。具体地,当R % K >= (L-1) % K时,修正为K-((R/K)*K-L+1)。若R%K < (L-1)%K时,修正为0。

代码实现
public static int count(int L, int R, int K) {
    int N1 = R / K - (L-1) / K;
    int N2 = (R-(R/K)*K >= K ? K-((R/K)*K-L+1) : 0);
    return R-L+1-(N1+N2);
}
性能分析

本算法的时间复杂度为O(1),空间复杂度为O(1)。在实际应用中,该算法具有较高的效率和精度,可以满足大部分场景的需求。

结论

本文介绍了一种计算[L, R]范围内,至少包含一个能够被K整除的数字的个数的方法。该算法具有较高的效率和精度,可以满足大部分场景的需求。