整数的平方根,为什么这个有效?

时间:2014-04-01 09:16:17

标签: assembly square-root

大家早上好,今天我已经看到了一种聪明的方法来评估整数的整数平方根。虽然它确实有效但我不明白为什么它有效。 这是代码:

mov output, 0
mov eax, input
mov ebx, 1
loop:
sub eax, ebx 
cmp eax, 0   
jl end      
inc output
add ebx, 2
jmp loop
end:

现在请注意我的问题,我知道这是如何工作的:它通过不均匀的数字(1,3,5,7 ...)减少输入,如果输入仍然> = 0则增加输出按1并重复该过程,否则输出是输入的整数平方根。我不知道的是这个算法有效的原因,我问是否有人知道它。

1 个答案:

答案 0 :(得分:1)

要生成i = 1到n(2 i - 1)之和,请反转数字并添加:

      1 +    3 +    5 +    7 + ... + 2n-3 + 2n-1
+  2n-1 + 2n-3 + 2n-5 + 2n-7 + ... +    3 +    1
   ----------------------------------------------
     2n +   2n +   2n +   2n + ... +   2n +   2n

= 2n ^ 2但由于总和加2次除以2,所以

i = 1到n的总和(2 i-1)= n ^ 2.