Compute the square root of a positive integer using binary searchInteger square root in x86 assembly (NASM)Epilogue to a binary search to find the range of matching indexesBinary search that gets ALL matching resultsBinary search of an integer arraySend a tweet to ISP when internet speed dropsNavigating over a square spiralSwiftly counting rooms in a floor planHashTable using C
What was the intention with the Commodore 128?
Did Michelle Obama have a staff of 23; and Melania have a staff of 4?
How to use the passive form to say "This flower was watered."
What is the opposite of "hunger level"?
What should I do with the stock I own if I anticipate there will be a recession?
Gofer work in exchange for Letter of Recommendation
A Magic Diamond
Polar contour plot in Mathematica?
Meaning and structure of headline "Hair it is: A List of ..."
Unsolved Problems due to Lack of Computational Power
When does The Truman Show take place?
How to render "have ideas above his station" into German
Is it alright to say good afternoon Sirs and Madams in a panel interview?
Existence of a certain set of 0/1-sequences without the Axiom of Choice
Unconventional examples of mathematical modelling
How do I cope with haze for the photos containing sky and trees at a distance?
Heyawacky: Ace of Cups
Designing a prison for a telekinetic race
What happened after the end of the Truman Show?
Are there any OR challenges that are similar to kaggle's competitions?
Why should P.I be willing to write strong LOR even if that means losing a undergraduate from his/her lab?
What exactly happened to the 18 crew members who were reported as "missing" in "Q Who"?
A reccomended structured approach to self studying music theory for songwriting
Output with the same length always
Compute the square root of a positive integer using binary search
Integer square root in x86 assembly (NASM)Epilogue to a binary search to find the range of matching indexesBinary search that gets ALL matching resultsBinary search of an integer arraySend a tweet to ISP when internet speed dropsNavigating over a square spiralSwiftly counting rooms in a floor planHashTable using C
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
The requirement is to find the square root of a positive integer using binary search and the math property that square root of a number n
is between 0
and n/2
, and the required answer is "floored", meaning mySqrt(8)
is to return 2
.
Please comment on the efficiency, and if possible, the loop invariants in terms of correctness:
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Loop invariant:
The answer is always in the range [low, high] inclusive,
except possibly:
1) low == high == mid, and mid * mid == x and
any of low, high, or mid can be returned as the answer.
2) if there is no exact answer and the floor is to be
returned, then low > high by 1. Since sq != x,
so either low or high is set.
If low gets set and gets pushed up, it is pushed up too much.
So when low > high by 1, low - 1 is the answer and it is the same
as high, because low > high by 1.
If high gets set and gets pushed down, high can be
the correct answer. When low > high, it is by 1,
and high is the correct floor value to be returned.
(since there is no perfect square root and the floor is required)
0 <= low <= answer <= high <= n//2 + 1
where answer is floor(sqrt(x)) to be found,
except if low > high and the loop will exit.
Each loop iteration always makes the range smaller.
If the range is empty at the end, low is > high by 1, and high is
the correct floored value, and low is the ceiling value, so high is returned.
"""
low = 0;
high = x//2 + 1;
while (low <= high):
mid = low + (high - low) // 2;
sq = mid * mid;
if (sq == x):
return mid;
elif (sq > x):
high = mid - 1; # sq exceeds target, so mid cannot be the answer floored, but when high is set to mid - 1, then it can be the answer
else:
low = mid + 1; # (here sq < x, and mid might be the answer floored, so when low is set to mid + 1, then low might be too big, while high is correct)
return high;
python algorithm mathematics binary-search
$endgroup$
add a comment |
$begingroup$
The requirement is to find the square root of a positive integer using binary search and the math property that square root of a number n
is between 0
and n/2
, and the required answer is "floored", meaning mySqrt(8)
is to return 2
.
Please comment on the efficiency, and if possible, the loop invariants in terms of correctness:
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Loop invariant:
The answer is always in the range [low, high] inclusive,
except possibly:
1) low == high == mid, and mid * mid == x and
any of low, high, or mid can be returned as the answer.
2) if there is no exact answer and the floor is to be
returned, then low > high by 1. Since sq != x,
so either low or high is set.
If low gets set and gets pushed up, it is pushed up too much.
So when low > high by 1, low - 1 is the answer and it is the same
as high, because low > high by 1.
If high gets set and gets pushed down, high can be
the correct answer. When low > high, it is by 1,
and high is the correct floor value to be returned.
(since there is no perfect square root and the floor is required)
0 <= low <= answer <= high <= n//2 + 1
where answer is floor(sqrt(x)) to be found,
except if low > high and the loop will exit.
Each loop iteration always makes the range smaller.
If the range is empty at the end, low is > high by 1, and high is
the correct floored value, and low is the ceiling value, so high is returned.
"""
low = 0;
high = x//2 + 1;
while (low <= high):
mid = low + (high - low) // 2;
sq = mid * mid;
if (sq == x):
return mid;
elif (sq > x):
high = mid - 1; # sq exceeds target, so mid cannot be the answer floored, but when high is set to mid - 1, then it can be the answer
else:
low = mid + 1; # (here sq < x, and mid might be the answer floored, so when low is set to mid + 1, then low might be too big, while high is correct)
return high;
python algorithm mathematics binary-search
$endgroup$
add a comment |
$begingroup$
The requirement is to find the square root of a positive integer using binary search and the math property that square root of a number n
is between 0
and n/2
, and the required answer is "floored", meaning mySqrt(8)
is to return 2
.
Please comment on the efficiency, and if possible, the loop invariants in terms of correctness:
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Loop invariant:
The answer is always in the range [low, high] inclusive,
except possibly:
1) low == high == mid, and mid * mid == x and
any of low, high, or mid can be returned as the answer.
2) if there is no exact answer and the floor is to be
returned, then low > high by 1. Since sq != x,
so either low or high is set.
If low gets set and gets pushed up, it is pushed up too much.
So when low > high by 1, low - 1 is the answer and it is the same
as high, because low > high by 1.
If high gets set and gets pushed down, high can be
the correct answer. When low > high, it is by 1,
and high is the correct floor value to be returned.
(since there is no perfect square root and the floor is required)
0 <= low <= answer <= high <= n//2 + 1
where answer is floor(sqrt(x)) to be found,
except if low > high and the loop will exit.
Each loop iteration always makes the range smaller.
If the range is empty at the end, low is > high by 1, and high is
the correct floored value, and low is the ceiling value, so high is returned.
"""
low = 0;
high = x//2 + 1;
while (low <= high):
mid = low + (high - low) // 2;
sq = mid * mid;
if (sq == x):
return mid;
elif (sq > x):
high = mid - 1; # sq exceeds target, so mid cannot be the answer floored, but when high is set to mid - 1, then it can be the answer
else:
low = mid + 1; # (here sq < x, and mid might be the answer floored, so when low is set to mid + 1, then low might be too big, while high is correct)
return high;
python algorithm mathematics binary-search
$endgroup$
The requirement is to find the square root of a positive integer using binary search and the math property that square root of a number n
is between 0
and n/2
, and the required answer is "floored", meaning mySqrt(8)
is to return 2
.
Please comment on the efficiency, and if possible, the loop invariants in terms of correctness:
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Loop invariant:
The answer is always in the range [low, high] inclusive,
except possibly:
1) low == high == mid, and mid * mid == x and
any of low, high, or mid can be returned as the answer.
2) if there is no exact answer and the floor is to be
returned, then low > high by 1. Since sq != x,
so either low or high is set.
If low gets set and gets pushed up, it is pushed up too much.
So when low > high by 1, low - 1 is the answer and it is the same
as high, because low > high by 1.
If high gets set and gets pushed down, high can be
the correct answer. When low > high, it is by 1,
and high is the correct floor value to be returned.
(since there is no perfect square root and the floor is required)
0 <= low <= answer <= high <= n//2 + 1
where answer is floor(sqrt(x)) to be found,
except if low > high and the loop will exit.
Each loop iteration always makes the range smaller.
If the range is empty at the end, low is > high by 1, and high is
the correct floored value, and low is the ceiling value, so high is returned.
"""
low = 0;
high = x//2 + 1;
while (low <= high):
mid = low + (high - low) // 2;
sq = mid * mid;
if (sq == x):
return mid;
elif (sq > x):
high = mid - 1; # sq exceeds target, so mid cannot be the answer floored, but when high is set to mid - 1, then it can be the answer
else:
low = mid + 1; # (here sq < x, and mid might be the answer floored, so when low is set to mid + 1, then low might be too big, while high is correct)
return high;
python algorithm mathematics binary-search
python algorithm mathematics binary-search
edited 6 hours ago
太極者無極而生
asked 8 hours ago
太極者無極而生太極者無極而生
1997 bronze badges
1997 bronze badges
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
Your comments on the elif / else part are too long to be just after the statements
Don't use semicolons (;) in Python.
This is a refactored version of the code
import math
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Returns floor(sqrt(x))
"""
low = 0
high = x//2 + 1
"""
It is proved that 0 <= sqrt(x) <= x/2, so
we run a dichotomic in [0, x/2] to find floor(sqrt(x))
Loop analysis:
* Initialization: low = 0 and high = x/2 + 1
* Termination: |high-low| is reduced each iteration,
as shown in lines high = mid - 1 and low = mid + 1.
* Invariant: low <= floor(sqrt(x)) <= high.
Let mid be (low + high)/2.
- If mid^2 <= x < (mid+1)^2,
then mid is floor(sqrt(x)) and just return it.
- If mid^2 > x, search for values smaller than mid.
- Otherwise, if mid^2 < x, search within higher values.
"""
while (low <= high):
mid = (low + high) // 2
sq = mid * mid
sq_next = (mid+1)*(mid+1)
if (sq <= x < sq_next):
return mid
elif (sq > x):
high = mid - 1
else:
low = mid + 1
for i in range(1, 26):
assert(math.floor(math.sqrt(i)) == Solution().mySqrt(i))
$endgroup$
$begingroup$
I suppose if it is Python, it can bemid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to becomebignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int
$endgroup$
– 太極者無極而生
8 hours ago
1
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider howlow
orhigh
gets set... interesting... it looks like it can make it simpler loop invariants
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
|
show 3 more comments
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f226340%2fcompute-the-square-root-of-a-positive-integer-using-binary-search%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Your comments on the elif / else part are too long to be just after the statements
Don't use semicolons (;) in Python.
This is a refactored version of the code
import math
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Returns floor(sqrt(x))
"""
low = 0
high = x//2 + 1
"""
It is proved that 0 <= sqrt(x) <= x/2, so
we run a dichotomic in [0, x/2] to find floor(sqrt(x))
Loop analysis:
* Initialization: low = 0 and high = x/2 + 1
* Termination: |high-low| is reduced each iteration,
as shown in lines high = mid - 1 and low = mid + 1.
* Invariant: low <= floor(sqrt(x)) <= high.
Let mid be (low + high)/2.
- If mid^2 <= x < (mid+1)^2,
then mid is floor(sqrt(x)) and just return it.
- If mid^2 > x, search for values smaller than mid.
- Otherwise, if mid^2 < x, search within higher values.
"""
while (low <= high):
mid = (low + high) // 2
sq = mid * mid
sq_next = (mid+1)*(mid+1)
if (sq <= x < sq_next):
return mid
elif (sq > x):
high = mid - 1
else:
low = mid + 1
for i in range(1, 26):
assert(math.floor(math.sqrt(i)) == Solution().mySqrt(i))
$endgroup$
$begingroup$
I suppose if it is Python, it can bemid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to becomebignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int
$endgroup$
– 太極者無極而生
8 hours ago
1
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider howlow
orhigh
gets set... interesting... it looks like it can make it simpler loop invariants
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
|
show 3 more comments
$begingroup$
Your comments on the elif / else part are too long to be just after the statements
Don't use semicolons (;) in Python.
This is a refactored version of the code
import math
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Returns floor(sqrt(x))
"""
low = 0
high = x//2 + 1
"""
It is proved that 0 <= sqrt(x) <= x/2, so
we run a dichotomic in [0, x/2] to find floor(sqrt(x))
Loop analysis:
* Initialization: low = 0 and high = x/2 + 1
* Termination: |high-low| is reduced each iteration,
as shown in lines high = mid - 1 and low = mid + 1.
* Invariant: low <= floor(sqrt(x)) <= high.
Let mid be (low + high)/2.
- If mid^2 <= x < (mid+1)^2,
then mid is floor(sqrt(x)) and just return it.
- If mid^2 > x, search for values smaller than mid.
- Otherwise, if mid^2 < x, search within higher values.
"""
while (low <= high):
mid = (low + high) // 2
sq = mid * mid
sq_next = (mid+1)*(mid+1)
if (sq <= x < sq_next):
return mid
elif (sq > x):
high = mid - 1
else:
low = mid + 1
for i in range(1, 26):
assert(math.floor(math.sqrt(i)) == Solution().mySqrt(i))
$endgroup$
$begingroup$
I suppose if it is Python, it can bemid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to becomebignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int
$endgroup$
– 太極者無極而生
8 hours ago
1
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider howlow
orhigh
gets set... interesting... it looks like it can make it simpler loop invariants
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
|
show 3 more comments
$begingroup$
Your comments on the elif / else part are too long to be just after the statements
Don't use semicolons (;) in Python.
This is a refactored version of the code
import math
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Returns floor(sqrt(x))
"""
low = 0
high = x//2 + 1
"""
It is proved that 0 <= sqrt(x) <= x/2, so
we run a dichotomic in [0, x/2] to find floor(sqrt(x))
Loop analysis:
* Initialization: low = 0 and high = x/2 + 1
* Termination: |high-low| is reduced each iteration,
as shown in lines high = mid - 1 and low = mid + 1.
* Invariant: low <= floor(sqrt(x)) <= high.
Let mid be (low + high)/2.
- If mid^2 <= x < (mid+1)^2,
then mid is floor(sqrt(x)) and just return it.
- If mid^2 > x, search for values smaller than mid.
- Otherwise, if mid^2 < x, search within higher values.
"""
while (low <= high):
mid = (low + high) // 2
sq = mid * mid
sq_next = (mid+1)*(mid+1)
if (sq <= x < sq_next):
return mid
elif (sq > x):
high = mid - 1
else:
low = mid + 1
for i in range(1, 26):
assert(math.floor(math.sqrt(i)) == Solution().mySqrt(i))
$endgroup$
Your comments on the elif / else part are too long to be just after the statements
Don't use semicolons (;) in Python.
This is a refactored version of the code
import math
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
Returns floor(sqrt(x))
"""
low = 0
high = x//2 + 1
"""
It is proved that 0 <= sqrt(x) <= x/2, so
we run a dichotomic in [0, x/2] to find floor(sqrt(x))
Loop analysis:
* Initialization: low = 0 and high = x/2 + 1
* Termination: |high-low| is reduced each iteration,
as shown in lines high = mid - 1 and low = mid + 1.
* Invariant: low <= floor(sqrt(x)) <= high.
Let mid be (low + high)/2.
- If mid^2 <= x < (mid+1)^2,
then mid is floor(sqrt(x)) and just return it.
- If mid^2 > x, search for values smaller than mid.
- Otherwise, if mid^2 < x, search within higher values.
"""
while (low <= high):
mid = (low + high) // 2
sq = mid * mid
sq_next = (mid+1)*(mid+1)
if (sq <= x < sq_next):
return mid
elif (sq > x):
high = mid - 1
else:
low = mid + 1
for i in range(1, 26):
assert(math.floor(math.sqrt(i)) == Solution().mySqrt(i))
edited 7 hours ago
answered 8 hours ago
JnxFJnxF
4384 silver badges13 bronze badges
4384 silver badges13 bronze badges
$begingroup$
I suppose if it is Python, it can bemid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to becomebignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int
$endgroup$
– 太極者無極而生
8 hours ago
1
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider howlow
orhigh
gets set... interesting... it looks like it can make it simpler loop invariants
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
|
show 3 more comments
$begingroup$
I suppose if it is Python, it can bemid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to becomebignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int
$endgroup$
– 太極者無極而生
8 hours ago
1
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider howlow
orhigh
gets set... interesting... it looks like it can make it simpler loop invariants
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
$begingroup$
I suppose if it is Python, it can be
mid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to become bignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int$endgroup$
– 太極者無極而生
8 hours ago
$begingroup$
I suppose if it is Python, it can be
mid = (low + high) // 2
because there is infinite precision arithmetics... but it just depends whether you want it first to overflow (either 32 bit or 64 bit int) to become bignum
, and then divided by 2 to make it back to a 32 bit or 64 bit int$endgroup$
– 太極者無極而生
8 hours ago
1
1
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
@太極者無極而生 Take a look to the new answer; now there is no need for returning high or low after the loop, so it is easier to reason about.
$endgroup$
– JnxF
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider how
low
or high
gets set... interesting... it looks like it can make it simpler loop invariants$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
you are using $$mid^2$$ and $$ (mid+1)^2 $$ to check for the answer and return and no need to consider how
low
or high
gets set... interesting... it looks like it can make it simpler loop invariants$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
how come you assert from 1 to 26 instead of from 1 to some larger number like... 5000 or a million
$endgroup$
– 太極者無極而生
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
$begingroup$
@太極者無極而生 Code is proved to be correct mathematically, so you can check up to any number you want. Checked up to $1000000$ and it works (surely, you can try up to any number you want).
$endgroup$
– JnxF
7 hours ago
|
show 3 more comments
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f226340%2fcompute-the-square-root-of-a-positive-integer-using-binary-search%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown