如何求数和的模

How to find modulo of a sum of numbers?

本文关键字:和的 何求数      更新时间:2023-10-16

我正在寻找一种方法来找到一系列数字的模,比如:(a1+a2+a3+a4+…+an)mod x

有没有模函数的任何方法/性质,这样我就可以从序列中数字的各个模中计算出这个序列的模。

我记得。你可以:

(a1 mod x + a2 mod x + a3 mod x + ... + an mod x) mod x

这样的等式有利于一个目的。如果数字之和超过用于求和的变量的容量。例如32位内部

这样,很可能模的和将适合用于求和的var。取决于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;

Mod运算符是分布式的;

( x + y ) % z

相当于:

( x % z + y % z ) % z

由于这样做的目的通常是避免溢出,以下内容可能仍然溢出,因为我们正在对所有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 ....

应避免溢出。