2014-04-01 5 views
1

Доброе утро всем, сегодня мне показали умный способ оценить целочисленный квадратный корень из целого числа. Хотя он действительно работает, я не понимаю, почему он работает. Вот, код:целочисленный квадратный корень целого числа, почему это работает?

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 и повторяет процесс, иначе вывод представляет собой целочисленный квадратный корень ввода. Я не знаю, почему этот алгоритм работает, я спрашиваю, знает ли кто-нибудь об этом.

+0

Извещение 1 = 1, 1 + 3 = 4, 1 + 3 + 5 = 9 ... Общая сумма первых n нечетных чисел равна n^2. Это одна из самых распространенных серий http://mathoverflow.net/questions/4348/sum-of-odd-numbers-results-in-a-square-number –

ответ

1

Для того, чтобы сгенерировать сумму для I = 1 до п (2 я - 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 так

Сумма для i = 1 - n of (2 i - 1) = n^2.