我正在寻找一种方法来寻找一个数字序列的模像:(a1 + a2 + a3 + a4 + ... + an) mod
有没有模函数的方法/性质,以便我可以从序列中数字的单个mod计算该序列的mod?
发布于 2014-10-12 16:35:37
据我所知。您可以:
(a1 mod x + a2 mod x + a3 mod x + ... + an mod x) mod x这样的等式只会有一个好处。如果这些数字的和超过了用于求和的变量的容量。例如。32位整型。
这样,模数的和很可能会适合用于求和的已用变量。取决于x值和序列长度。
示例代码
int sum = 0;
for (int i=0;i<n;i++)
sum += a[i] % x;
int mod = sum % x;更好的方法(不是很确定)
int sum = 0;
for (int i=0;i<n;i++) {
sum += a[i] % x;
sum %= x;
}
int mod = sum;发布于 2014-10-12 16:34:39
Mod算子是可分配的;
( x + y ) % z..。等同于:
( x % z + y % z ) % z发布于 2021-10-02 11:36:56
因为这样做的目的通常是为了避免溢出,下面可能仍然溢出,因为我们正在对所有mod值求和。
错误的方法,如果我们想要避免溢出:
(a1 mod x + a2 mod x + a3 mod x + ... + an mod x) mod x我们需要对每一笔和都进行mod。
假设ai < x,
((((a1 + a2) mod x) + a3) mod x) + a4) mod x ....应该避免溢出。
https://stackoverflow.com/questions/26323271
复制相似问题