繁体   English   中英

如何找到数字总和的模数?

[英]How to find modulo of a sum of numbers?

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

有没有模 function 的任何方式/属性,以便我可以从序列中的数字模数中计算出这个序列的模数。

我记得。 您可以:

(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;

Mod运算符是分布式的;

( x + y ) % z

......相当于:

( x % z + y % z ) % z

由于这样做的目的通常是为了避免溢出,因此当我们对所有 mod 值求和时,下面的内容可能仍会溢出。

如果我们想避免溢出,错误的做法是:

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

我们需要在每次求和后进行修改。

假设 ai < x,

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

应该避免溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM