C++中的欧几里得整数模
Euclidean integer modulo in C++
在哪里可以找到计算整数欧几里得除法余数0 <= r < |n|
的实现或库?
在C++语言的C++98和C++03版本中,内置除法(位/
和%
运算符)可能是欧几里得的,也可能是非欧几里得的——这是实现定义的。然而,大多数实现将商截断为零,不幸的是,这是非欧几里得。
在大多数实现中,CCD_ 4和CCD_。在欧几里得除法中CCD_ 6和CCD_。
C++11要求整数除法是非欧几里得的:它需要一个向零截断的实现。
正如你所看到的,这个问题只是由负数引起的。因此,您可以通过使用运算符%
和后校正负余数来轻松地实现欧几里得除法
int euclidean_remainder(int a, int b)
{
assert(b != 0);
int r = a % b;
return r >= 0 ? r : r + std::abs(b);
}
如果结果必须为正,请尝试(x%m + m)%m
。
围绕这一点或任何变体编写你自己的函数,不要被库所困扰——你花了更多的时间询问,而不是仅仅去做。为你需要的简单函数创建你自己的库(工具箱)。
这是一个简单的运算符。%。
5%4是1等
编辑:正如已经指出的,根据您的实现,这不一定是欧几里德模型。
#define EUCMOD(a, b) (a < 0 ? (((a % b) + b) % b) : (a % b))
我真的很喜欢Brandon的回答,但我开始有一些奇怪的错误。经过一些测试,我发现EUCMOD宏的扩展扰乱了操作的优先级。
因此,我建议将其用作函数,而不是宏
int eucmod(const int a, const int b)
{
return (a < 0 ? (((a % b) + b) % b) : (a % b));
}
或者添加几个括号
#define EUCMOD(a,b) ((a) < 0 ? ((((a) % (b)) + (b)) % (b)) : ((a) % (b)))
相关文章:
- 使用内在指令的欧几里得距离
- C++ 两个线程,共享几个整数变量
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 咖啡馆欧几里得损失计算超过图像
- 本玄C++;欧几里得变换与特征::变换
- 使用C - CIN获取几个整数数字,然后将它们放入数组中
- 如何在OpENCV中的图像中找到像素之间的欧几里得距离
- 使用欧几里得公式求全毕达哥拉斯三元组
- 如何查找用户使用 do/while、While 语句或 For 语句输入的几个整数的总和
- 将欧几里得转换为C 和OpenCV中的均匀空间
- 欧几里得的扩展算法C++
- C++中的欧几里得整数模
- 实现欧几里得除法,根据两个正整数的线性组合编写这两个正整数的最大公约数
- 使用欧几里得算法找到GCF(GCD)
- 在 GPU 上计算欧几里得距离矩阵的平方
- 在 c++ 中扩展欧几里得算法的递归中究竟发生了什么?
- 使用 int 数组作为键的二叉树(欧几里得距离)
- 欧几里得算法函数参数
- 寻找毕达哥拉斯三元组:欧几里得公式
- 使用欧几里得算法识别两个值的最大公约数 (GCD)