连续的截断整数除法可以用乘法代替吗?

标签 c math division integer-division

在有理数的小学数学中,通过基本代数运算,表达式(a/b)/c 等价于a/(b * c)

/ 与 C 和大多数其他语言一样截断整数除法时,情况也是如此吗?也就是说,我可以用所有除数的乘积来替换一系列除法吗?

您可以假设乘法不会溢出(如果溢出,则显然它们不等价)。

最佳答案

答案是"is"(至少对于非负整数)。这是从division algorithm得出的其中指出对于任何正整数 a,d我们有a = dq+r对于唯一的非负整数 q,r0 <= 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_2a/(b*c) 。因此a/b/c = a/(b*c) .

关于连续的截断整数除法可以用乘法代替吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280070/

相关文章:

javascript - 为什么 JavaScript 中的数学方法比按位运算符更快?

Java Math 未返回正确答案

c - C 中的除以 2 和无限循环

c - 函数声明不是原型(prototype)

对 OpenSSL 非阻塞 I/O 感到困惑

c - 将 ext2 super block 读入 ext2_super_block 结构问题

c++ - 带unsigned int的字节数组的求余算法

c - 警告 : return makes pointer from integer without a cast but returns integer as desired

javascript - 使用斜率和 javascript 进行响应式网页设计

c# - WPF 两个 Line 对象的交点坐标