累积数字和

时间:2015-04-10 12:48:54

标签: c sum

我必须在不使用数组的情况下找到累积的数字和。如果n = 3& k = 5然后我的回答就像这样n

   1+2+3+4+5 (sum of k elements)
+  1+3+6+10+15
+  1+4+10+20+35
(i.e. n times)

n& k范围从1到10 ^ 9

此处索引2中的元素是从索引1到索引x的前一系列的累积和,如

第二个系列中的第二个值是3,它是前一个系列1 + 2

中第二个值的累积总和

第二个系列中的第三个值是6,它是前一个系列1 + 2 + 3中累积总和达到第三个值

同样,第三个系列中的第三个值是10,它是前一个系列1 + 3 + 6中累积总和达到第三个值 我知道的方法是

        //For n==1
        for(i=0;i<k;i++)
        {
            a[i]=i+1;
            sum = sum + a[i]%mod;
        }
        if(n==1)
        {
            printf("%lld\n",sum%mod);
        }
        //For n>1
        else
        {
            res = (n-1)*k;
            for(w=0;w<res;w++)
            {
                f = w%k;
                if(f==0)
                {
                    a[f] = 1;
                    sum = sum + a[f]%mod;
                }
                else
                {
                    a[f] = a[f]+a[f-1];
                    sum = sum + a[f]%mod;
                }
            }
            printf("%lld\n",sum%mod);
        }

这里我一次又一次地使用一个存储该系列的数组并找到它的累积和,但这里n * k太大了。

请通过建议一些优化方法来帮助我 最后我必须找到所有这些数字的总和 modulo 1000003 1 + 2 + 3 + 4 + 5 + 1 + 3 + 6 + 10 + 15 + 1 + 4 + 10 + 20 + 35 = 120%1000003 = 120

2 个答案:

答案 0 :(得分:0)

我建议使用递归,因为你不能使用数组。如果你需要更多的入门,请告诉我(这听起来很像一个测试问题所以我认为我不应该只是说出答案)。

答案 1 :(得分:0)

我可以指出一个简单的观察,就像任何元素集一样,因为你必须最终取出模数,如果模数(M)是素数然后重复累计和n次(其中n> M)你再次登陆M迭代的原始数字集。然后你必须处理剩余的n-M次迭代。

观看:[https://en.wikipedia.org/wiki/Figurate_number]