【问题标题】:Modulur arithmetic logic to reduce calculations模块化算术逻辑以减少计算
【发布时间】: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 限制是有原因的:这意味着 Nm 都可以安全地存储在 32 位整数或 int 中。您的最终结果应该很适合 long
  • 感谢 T.C. 的评论:我需要帮助学习模运算的概念来处理大整数运算。任何参考将不胜感激。再次感谢:)

标签: java modular-arithmetic


【解决方案1】:

我想我明白你在问什么,在这种情况下,它实际上更像是一个算术问题而不是一个编程问题,但无论如何都是这样。 尝试一个具体的例子。如果您将 i 的总和从 i % 3 的 1 到 10 加起来,则添加 1 + 2 + 0 + 1 + 2 + 0 + 1 + 2 + 0 + 1。你可以看到你有同样的东西一遍又一遍,所以你需要做的是弄清楚那是什么,弄清楚你需要添加多少次,然后在最后添加剩余的位。

【讨论】:

  • 感谢发布,实现相同,没有帮助 - 关于模数的任何其他选项
  • 是给你错误的答案还是还没完成?
猜你喜欢
  • 2014-12-07
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
相关资源
最近更新 更多