Python gmpy2 f_divmod 函数困惑

0 投票
1 回答
772 浏览
提问于 2025-04-17 16:12

我刚开始学习Python,最近在玩gmpy2这个库,但对其中一个函数有点困惑,gmpy的文档在这方面没有帮助:

我想进行带有取模(modulus)和向下取整(floor)的除法,所以我找到了f_divmod()这个函数:

f_divmod(...) f_divmod(x, y)会返回x除以y的商和余数。商是向下取整的(也就是取小于等于的整数),而余数会和y有相同的符号。x和y必须是整数。

但是如果这个函数的功能和我想的一样(这可能是我理解错了),它应该是做x / y % m,但我看不到提供m的方法。这个函数是不是不对,还是我需要在别的地方定义一个取模?

我想到的替代方法是:

c = gmpy2.f_div(a, b) % m

提前谢谢你们!

1 个回答

3

注意:我在维护gmpy2这个库。

gmpy2.f_divmod()(还有gmpy2.c_divmod()gmpy2.t_divmod()gmpy2.divmod())的设计灵感来自于内置的divmod()函数。这些函数都能返回商和余数,但每个函数计算商和余数的规则稍微有点不同。它们的名字是为了让人明白这些函数返回的是一个元组(a // b, a % b)。它们并不是先做除法再做取余。

如果你想用向下取整的方式计算商,然后再用这个结果去做取余运算,那么你选择的替代方法是正确的。

稍微偏题的提示:你应该养成使用//来进行整数除法的习惯。在Python 3中,/会变成浮点数除法。而//在Python 2和3中都是整数除法。

撰写回答