【发布时间】:2014-06-14 20:37:56
【问题描述】:
mod 的概念是只保留余数而不是大数。
计算公式:
=> 求和 i=1 到 i=N { i%m }
约束
1 ≤ N ≤ 10^9 1≤m≤10^9
如何使用模数以便我们不需要求和到 10^9(大数)。 Java 代码因超时或 CPU 代码被欺骗而终止 大量执行时出错。
CODE:k是要打印的求和结果。
for (BigInteger bi = BigInteger.valueOf(1);
bi.compareTo(N) <= 0;
bi = bi.add(BigInteger.ONE)){
k = k.add(bi.mod(m));
}
System.out.println(k);
【问题讨论】:
-
不要使用
BigInteger。存在 10^9 限制是有原因的:这意味着N和m都可以安全地存储在 32 位整数或int中。您的最终结果应该很适合long。 -
感谢 T.C. 的评论:我需要帮助学习模运算的概念来处理大整数运算。任何参考将不胜感激。再次感谢:)