int a,b,c,d=0;
cin>>a>>b>>c;
for (int i=a;i<=b;i++)
{
if (i%c==0){d++;}
}
cout<<d;
因此,这是代码,a..b
是数字范围,c
是除数,d
计算c
的倍数。例如,当a=5, b=15, c=3
,d
等于4
时,因为“6,9,12,15”是5到15之间的倍数。
我需要找到更快的方法来做到这一点,任何人都可以帮忙吗?
答案 0 :(得分:6)
一种方法就是这样做(不需要循环):
int lower = (a + c - 1) / c; // find lowest divisor (round up)
int upper = b / c; // find higher divisor (round down)
d = upper - lower + 1; // get no of divisors
对于您的示例案例,lower
将为2,upper
将为5,d
等于4。
答案 1 :(得分:0)
一个未经测试的头顶算法,找到正整数的所有正确除数......
让你想要找到除数的数字为N
。
i = 2
N % i == 0
,则您有两个除数:i
和N/i
。将这些添加到除数列表(或计数)i > sqrt(N)
,则完成,否则设置i = i + 1
并转到(2)例如,如果N = 24,那么这会给你
i = 2 => 2, 12
i = 3 => 3, 8
i = 4 => 4, 6
sqrt(24) = 4.90, so finish
(我知道这个算法并没有严格符合您的要求,但它应该很容易适应。)
答案 2 :(得分:0)
而不是检查范围内的每个数字,你可以这样。
在最大数量内查找除数,然后在最小数量内。减法后你会得到理想的结果。例如: -
让我们说范围是[5,15]。
15/3 = 5; //within max number.
5/3 = 1; //within min number.
result = 5-1 = 4;
注意: - 您必须处理范围内的边界才能获得正确的结果。