2015-05-17 32 views
4

我的指示是“我从1到n,做我%m并返回总和,你需要得到一点聪明的表现,因为n可以是一个非常大的数字”在javascript中,如何在循环中高效处理大数字?

下面的程序小数字正常工作。我怎样才能使大数量的效率?

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

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

    return summ; 
} 
+8

由于这听起来像功课,我会给你一个提示,看看你是否可以找出下一步该做什么。在你的'for'循环里放一个'console.log(i%m)',看看它显示了什么值'n',至少是'm'的5倍。这是一个演示:http://jsfiddle.net/jfriend00/hjhjyrbe/。 – jfriend00

+2

我同意@ jfriend00,但我会给你一个提示:你不需要for循环来解决这个问题。 – Scelesto

+0

@ jfriend00它实际上是codewars.com上的一项任务,所以您的帮助正是我想要的。不幸的是,它再次使用小数字,但不是大数字:https://jsfiddle.net/q1g8g6w2/ – Wilfredo

回答

0

要看到什么情况发生考虑部分和,首先从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