区间内的倍数

3
给定一个数字n和一些区间(L:R),如何计算该区间内n的倍数的数量?
如果我使用(R-L+1)/n,它将无法给出正确的答案,因为例如,在3和5之间,有一个4的倍数,但(5-3+1)/4 = 0,在4和8之间,有2个4的倍数,但(8-4+1)/4 = 1。
我尝试了这个方法,但它也行不通(在div(4,4,13) = 2中失败)。
int div(int n, int l, int r){
    let mod = n - l % n;
    let first = mod == n? l : l + mod;
    return first > r? 0 : (r-first+1)/n + 1;
}

关键是:我不想检查一千个东西,我猜应该有一些快速的方法来完成。


L、n、R 是否为非负数? - John Coleman
假设 L>=0 - 这是很直观的。 - xenteros
问题是在正整数 L 和 R 之间有多少个 n 的倍数。 - Daniel
我在考虑计算从L到R的倍数数量,然后再减去。 - Daniel
1个回答

1

Wouldn't

R/n - (L-1)/n

假设这里进行整数除法运算?因为R/n是小于等于R的n的倍数个数,而(L-1)/n是小于L的n的倍数个数,两者之差就是你想要的。

1
@downvoter - 一个反例会很好。谢谢! - zw324
你能否编辑你的回答,这样我就可以把我的踩转成赞? - xenteros
1
@xenteros:当然,为了声望我什么都愿意做。谢谢! - zw324
有趣的是,由于这是一个整数除法,你不能将操作优化为(R - L + 1)/n,即使它意味着相同的结果,因为它会“遗忘”一些值,而如果你分别进行除法(例如:3和5),则不会丢失这些值。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接