
#include <stdlib.h>

typedef  unsigned long   U32;
typedef  unsigned short  U16;

U16 isqrt(U32 n);

int main(int argc, char ** argv) 
{
  U32 n;
  U16 r;
  if (argc != 2) return 1;
  n = atoi(argv[1]);

  r = isqrt(n);
  printf("sqrt(%u) = %u\n", n, r);
  return 0;
}

U16 isqrt(U32 n)
{
  U32 h = 65536, l = 0;
  while (h > l+1) {
    U32 m = (h+l)/2;
    if (m*m > n) 
      h = m;
    else if (m*m < n) 
      l = m;
    else 
      return m;
  }
  return l;
}
