【问题标题】:In javascript, how do I deal with large numbers efficiently in a loop?在javascript中,如何在循环中有效地处理大量数字?
【发布时间】:2015-07-29 08:40:28
【问题描述】:

我的指令是“对于从 1 到 n 的 i,是否 i % m 并返回总和。你需要在性能方面稍微聪明一点,因为 n 可能是一个非常大的数字”

下面的程序适用于小数字。我怎样才能使它高效地处理大量数字?

function f(n, m) {
    var summ = 0;

    for (var i = 1; i <= n; i++) {
        summ += i % m;
    }

    return summ;
}

【问题讨论】:

  • 既然这听起来像是功课,我会给你一个提示,看看你是否能弄清楚下一步该做什么。将console.log(i % m) 放入for 循环中,看看它显示的n 值至少是m 的5 倍。这是一个演示:jsfiddle.net/jfriend00/hjhjyrbe.
  • 我同意@jfriend00,但我再给你一个提示:你不需要for循环来解决这个问题。
  • @jfriend00 这实际上是 codewars.com 上的一个作业,所以你的帮助正是我想要的。不幸的是,它再次适用于小数字但不是大数字:jsfiddle.net/q1g8g6w2
  • @user3696359:实际上我们说的是no loops :-)
  • @Bergi,哈哈是的。我的第二次尝试仅基于 jfriend00 的评论,因为我没有阅读 scelesto 的建议。

标签: javascript math for-loop modulus largenumber


【解决方案1】:

要查看发生了什么考虑部分和,首先从 0 到 m-1 求和,从 m 到 2m - 1、从 2m 到 3m-1 等求和。

m=5;
for(j=0;j<5;++j) {
    partial = 0;
    for(i=j*5;i<j*5+5;++i) {
        partial += i % m;
        console.log( i , partial );
    }
}

要将事情简化为一行,请查看Triangular Numbers

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多