level 15
应该是后者循环时begin都要执行那三个计算吧(我算法不行不敢乱讲)
2017年11月08日 11点11分
4
level 14
和for循环效率关系倒不大
因为计算机中除法的运算非常慢,后者要运用3次除法、取余运算,效率就容易大降
如果你自己模拟分析一下:对于加法、乘法可以用类似线段树的算法并行计算做到加速,如果计算位数是N(这里比如Longint计算位数就是32位)复杂度是Log(N);但是除法你只能硬生生地计算,一般难以有非常好的效率,虽然Intel应该加了优化,但最差效率依旧是O(N)。
但是这里要另提的就是,如果你编译时开了优化(比如O2优化),那么编译器对于除以或取模常数他是会自动转化为乘、加减法的,具体方式你可以参考一些知乎文或Blog,这个加速是比较优的。
另外再提的就是对于后者,a,b,c的计算都是互不干涉的,其实他是可以循环展开优化的。你可以自己写循环展开或开启Pascal的编译优化开关,以此来加速。
2017年11月08日 13点11分
5