充满力量

Overflow with power

本文关键字:力量 满力量      更新时间:2023-10-16

如果我在计算[x*(a^b)%mod+y%mod]%mod,如果我只使用(a^b)%mod的话,乘以x会得到正确的答案吗?分步计算(x*(a^b))%mod不是更好的主意吗?只是想向自己证明为什么不包括x作品。能做些什么?

试试这个代码。其思想是引入模加法、乘法和幂运算的新函数:

#define MOD 1000000007
inline int modadd(int a, int b) {
    return ((long long)a + b) % MOD;
}
inline int modmult(int a, int b) {
    return ((long long) a * b) % MOD;
}
inline unsigned modexp(unsigned base, unsigned exp)
{
  unsigned result = 1;
  while (exp > 0) {
      if (exp & 1) result = ((unsigned long long)result * base) % MOD;
      base = ((unsigned long long)base * base) % MOD;
      exp >>= 1;
  }
  return result;
}
int main(void)
{
    unsigned A[3] = {1, 2, 3};
    unsigned r[3];
    unsigned i, n = 3;
    r[0] = 0;
    r[1] = modmult(2, A[0]);
    for (i = 1; i < n; i++) {
        r[i+1] = modadd(r[i], modmult(A[i], modexp(2, i)));
    }
}