检查 BigInteger 是否不是完全平方数
我有一个 BigInteger 值,假设它是 282 并且位于变量 x 内。我现在想编写一个 while 循环,其中指出:
while b2 isn't a perfect square:
a ← a + 1
b2 ← a*a - N
endwhile
我如何使用 BigInteger 来做这样的事情?
编辑:这样做的目的是让我可以编写此方法。正如文章所述,必须检查 b2 是否不是平方。
I have a BigInteger value, let's say it is 282 and is inside the variable x. I now want to write a while loop that states:
while b2 isn't a perfect square:
a ← a + 1
b2 ← a*a - N
endwhile
How would I do such a thing using BigInteger?
EDIT: The purpose for this is so I can write this method. As the article states one must check if b2 is not square.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我发现使用了 sqrt 方法这里< /a>,并简化了平方测试。
I found a sqrt method used here, and simplified the square test.
不要使用这个...
正如 Christian Semrau 在下面评论的那样 - 这不起作用。我很抱歉发布错误的答案。
DON'T use this...
As Christian Semrau commented below - this doesn't work. I am sorry for posting incorrect answer.
我使用 JavaScript BigInt 尝试了上述操作:
发现它的速度(在 Node V8 中)仅比单行代码快 60% 左右:
I tried the above using JavaScript BigInt:
And found it was only about 60% as fast (in Node V8) as the one-liner:
您想要进行完全平方检验的数字是 A。B 是 A 的整数平方根,.sqrt() 函数返回平方根的整数下限。返回 B*B=A 的布尔值。如果它是完全平方数,则布尔返回为“true”;如果不是完全平方,则返回“false”。
另一种方法是使用 sqrtAndRemainder() 函数。如果余数 B[1] 为零,则它是完全平方数。然后返回布尔值 TRUE,如下所示。
The number you want to do a perfect square test on is A. B is the integer square root of A and the .sqrt() function returns the integer lower floor of the square root. The Boolean of B*B=A is returned. The Boolean return is "true" if it is a perfect square and "false" if it is not a perfect square.
An alternative is to use the sqrtAndRemainder() function. If the remainder, B[1], is zero it is a perfect square. The boolean TRUE then is returned as shown below.
计算整数平方根,然后检查它的平方是否是您的数字。这是我使用 Heron 方法 计算平方根的方法:
Compute the integer square root, then check that its square is your number. Here is my method of computing the square root using Heron's method: