我必须在不使用数组的情况下找到累积的数字和。如果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
答案 0 :(得分:0)
我建议使用递归,因为你不能使用数组。如果你需要更多的入门,请告诉我(这听起来很像一个测试问题所以我认为我不应该只是说出答案)。
答案 1 :(得分:0)
我可以指出一个简单的观察,就像任何元素集一样,因为你必须最终取出模数,如果模数(M)是素数然后重复累计和n次(其中n> M)你再次登陆M迭代的原始数字集。然后你必须处理剩余的n-M次迭代。