/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdio.h>
#include "stdint.h"
uint32_t int_sqrt(uint32_t x) {
if (x < 2) return x;
uint32_t left = 0, right = x / 2 + 1;
uint32_t mid, square;
while (left <= right) {
mid = (left + right) / 2;
square = mid * mid;
if (square == x) {
return mid;
} else if (square < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return right;
}
uint32_t int_sqrt2(uint32_t x) {
if (x < 2) return x;
uint32_t res = x;
uint32_t temp;
// Метод Ньютона
while (1) {
temp = (res + x / res) / 2;
if (temp >= res) {
break;
}
res = temp;
}
return res;
}
int main()
{
uint16_t i;
uint32_t sqrt, res;
for(i=0;i<1000;i++){
sqrt = i;
sqrt = sqrt * sqrt;
res = int_sqrt2(sqrt);
if(i != res){
printf("error %d res %d\n\r",i,res);
break;
}
}
printf("Hello World");
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubGluZSBDIENvbXBpbGVyLgogICAgICAgICAgICAgICAgQ29kZSwgQ29tcGlsZSwgUnVuIGFuZCBEZWJ1ZyBDIHByb2dyYW0gb25saW5lLgpXcml0ZSB5b3VyIGNvZGUgaW4gdGhpcyBlZGl0b3IgYW5kIHByZXNzICJSdW4iIGJ1dHRvbiB0byBjb21waWxlIGFuZCBleGVjdXRlIGl0LgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSAic3RkaW50LmgiCgp1aW50MzJfdCBpbnRfc3FydCh1aW50MzJfdCB4KSB7CiAgICBpZiAoeCA8IDIpIHJldHVybiB4OwoKICAgIHVpbnQzMl90IGxlZnQgPSAwLCByaWdodCA9IHggLyAyICsgMTsKICAgIHVpbnQzMl90IG1pZCwgc3F1YXJlOwoKICAgIHdoaWxlIChsZWZ0IDw9IHJpZ2h0KSB7CiAgICAgICAgbWlkID0gKGxlZnQgKyByaWdodCkgLyAyOwogICAgICAgIHNxdWFyZSA9IG1pZCAqIG1pZDsKCiAgICAgICAgaWYgKHNxdWFyZSA9PSB4KSB7CiAgICAgICAgICAgIHJldHVybiBtaWQ7CiAgICAgICAgfSBlbHNlIGlmIChzcXVhcmUgPCB4KSB7CiAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJpZ2h0ID0gbWlkIC0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJpZ2h0Owp9Cgp1aW50MzJfdCBpbnRfc3FydDIodWludDMyX3QgeCkgewogICAgaWYgKHggPCAyKSByZXR1cm4geDsKCiAgICB1aW50MzJfdCByZXMgPSB4OwogICAgdWludDMyX3QgdGVtcDsKCiAgICAvLyDQnNC10YLQvtC0INCd0YzRjtGC0L7QvdCwCiAgICB3aGlsZSAoMSkgewogICAgICAgIHRlbXAgPSAocmVzICsgeCAvIHJlcykgLyAyOwogICAgICAgIGlmICh0ZW1wID49IHJlcykgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmVzID0gdGVtcDsKICAgIH0KCiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpCnsKICAgIAogICAgdWludDE2X3QgaTsKICAgIHVpbnQzMl90IHNxcnQsIHJlczsKICAgIGZvcihpPTA7aTwxMDAwO2krKyl7CiAgICAgICAgc3FydCA9IGk7CiAgICAgICAgc3FydCA9IHNxcnQgKiBzcXJ0OwogICAgICAgIHJlcyA9IGludF9zcXJ0MihzcXJ0KTsKICAgICAgICBpZihpICE9IHJlcyl7CiAgICAgICAgICAgIAogICAgICAgICAgICBwcmludGYoImVycm9yICVkIHJlcyAlZFxuXHIiLGkscmVzKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgCiAgICAKICAgIAogICAgCiAgICBwcmludGYoIkhlbGxvIFdvcmxkIik7CgogICAgcmV0dXJuIDA7Cn0=