【问题标题】:how to calculate (A*B*C)%10000007 where A,B,C can be at maximum 10^18如何计算 (A*B*C)%10000007 其中 A,B,C 最大为 10^18
【发布时间】:2014-02-15 19:18:49
【问题描述】:

如何计算 (A*B*C)%10000007 其中 A,B,C 最大为 10^18

【问题讨论】:

标签: modulus


【解决方案1】:

令 I = 10000007,所以

  • A = n1 * I + X1
  • B = n2 * I + X2
  • C = n3 * I + X3

A * B => (n1 * I + X1) (n2 * I + X2) => n1 * n2 * I^2 + n1 * X2 * I + n2 * X1 * I + X1 * X2 只有 X1 * X2 不能被 I 分频

因此,A * B % I === X1 * X2 % I === (A % I) * (B % I) % I

因此 (A * B * C) % I === [(A % I) * (B % I) % I] * (C % I) % I

【讨论】:

  • 在 C/C++ 中使用 long long,在 Java 中使用 long 等来保存 10^18。
猜你喜欢
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 2011-05-30
相关资源
最近更新 更多