【发布时间】:2020-07-24 06:03:41
【问题描述】:
这是一个简短的代码,它计算所有平方数的总和(实际上不是平方和),直到 n,其中 n 可以达到 10 pow 20。
long long res=0;
long long sm=0;
for (long long i = 1; res <=n; i=i+2)
{
res = (res+i);
sm = sm+(res*(n/res));
}
我们如何让上面的代码运行得更快?在这里,对于非常大的 n,例如 10 pow 20,sm 的计算需要时间。
有什么方法可以加快sm的计算速度?
这里 res 计算所有平方数,例如 1,4,9,16,25....
假设 n=10,那么正方形是 1,4,9,然后根据上面的代码,sm 是 (1)(10/4)+(4)(10/4)+(9)(10 /9)=27。
1*10+4*2+9*1=27。
这里的除法是整数除法。
编辑1:
我需要计算上面代码中提到的sm。
这里sm 是求和(i2 * floor(n/(i2))),其中 i=1 到 sqrt (n)
【问题讨论】:
-
如果您正在尝试回答一些在线判断测试或代码测验,请添加原始问题陈述的链接。一方面,我肯定不明白你应该做什么。
-
codeforces.com/contest/616/problem/E ,spoj.com/problems/SUMPRO 是两个类似的问题。我只是想知道如何解决上述问题,只是出于好奇,我正在我的系统上运行。但它非常慢。
-
请张贴原始问题的链接。你的问题描述不清楚。 SQRT 结果是两倍。你想要天花板或地板。与 n/(i^2) 相同。整数除法。下一篇:竞争性编程问题大多无法通过蛮力方法解决。你需要想出数学。最后:竞争性编程的代码质量极差。你应该永远不要拿这样的例子来学习 C++。例如。没有认真的 C++ 开发人员会将变量命名为总和“sm”。这太荒谬了。
-
我需要 n/(i^2) 的整数除法,并且 sqrt 结果是下限。这不是一个竞争性的编程问题。我从上面提到的链接中改变了问题。我提到的例子是(1)*(10/1)+(4)*(10/4)+(9)*(10/9)=27。关于 c++ 我正在努力学习 cpp 并成为一名 gud 开发人员,感谢您的建议。
标签: c++ algorithm performance sequence square