c++ - 如何在没有整数溢出的情况下找到 n%(k*k)?

标签 c++ modular-arithmetic

我知道 (a*b)%m 等于 ((a%m)*(b%m))%m

但是如何计算a%(m*m)呢?

最佳答案

我们需要在不引起整数溢出的情况下计算a%(m*m)

long long int a, m, sqrt_a, ans;
sqrt_a = sqrt(a);
if (sqrt_a < m) {
    ans = a; // since "m > sqrt_a" then a%(m*m) will be "a"
}
else {
   ans = a % (m*m); // since "m <= sqrt_a" then m*m won't cause overflow
}

关于c++ - 如何在没有整数溢出的情况下找到 n%(k*k)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331487/

相关文章:

c++ - 有人可以解释 openssl cli 和 c++ DES 输出的区别吗

c++ - 两个二维数组,两个矩阵,一个文件

python - 使用扩展欧几里德算法创建 RSA 私钥

c++ - 从 0 到 10^18 的数字总和,模数为 10^9+7

algorithm - 大数除法余数

c++ - OpenCV 中的海报检测?

c++ - 在 C++ 中初始化映射和删除的正确方法

c++ - C++ 中的引用到引用是什么意思? (不是右值引用)

javascript - 有效地在 JavaScript 中添加十六进制字符串

python - 如何实现模幂运算?