在有理数的小学数学中,通过基本代数运算,表达式(a/b)/c
等价于a/(b * c)
。
当 /
与 C 和大多数其他语言一样截断整数除法时,情况也是如此吗?也就是说,我可以用所有除数的乘积来替换一系列除法吗?
您可以假设乘法不会溢出(如果溢出,则显然它们不等价)。
最佳答案
答案是"is"(至少对于非负整数)。这是从division algorithm得出的其中指出对于任何正整数 a,d
我们有a = dq+r
对于唯一的非负整数 q,r
与 0 <= q <= d-1
。在这种情况下q
是 a/d
整数除法。
在 a/b/c
(使用整数除法)我们可以分两步来思考:
a = b*q_1 + r_1 // here q_1 = a/b and 0 <= r_1 <= b-1
q_1 = c*q_2 + r_2 // here q_2 = q_1/c = a/b/c and 0 <= r_2 <= c-1
但是然后
a = b*q_1 + r_1 = b*(c*q_2 + r_2) + r_1 = (b*c)*q_2 + b*r_2 + r1
请注意0 <= b*r_2 + r_1 <= b*(c-1) + b-1 = bc - 1
由此可知 q_2
是 a/(b*c)
。因此a/b/c = a/(b*c)
.
关于连续的截断整数除法可以用乘法代替吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280070/