[英]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.