【问题标题】:How to find modulo of a sum of numbers?如何找到数字总和的模?
【发布时间】:2014-12-07 00:44:50
【问题描述】:

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

是否有任何模函数的方式/属性,以便我可以从序列中的单个数字模数计算该序列的模数。

【问题讨论】:

  • 你知道 (a + b) % x == ((a%x) + (b%x)) % x 对吧?
  • 我也有同样的问题。你找到答案了吗?

标签: c++ math modulo


【解决方案1】:

Mod 运算符是可分配的;

( x + y ) % z

... 等价于:

( x % z + y % z ) % z

【讨论】:

    【解决方案2】:

    我记得。你可以:

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

    【讨论】:

      【解决方案3】:

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

      如果我们想避免溢出,方法错误:

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

      我们需要在每个总和之后进行修改。

      假设 ai

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

      应该避免溢出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多