两个数字之间的完美正方形

Mit*_*ski 10 c++ algorithm

在C(1秒以内)中是否有任何快速方法可以找到两个数字之间的完美平方数.对于前者 对于1 < - > 10,我们有2个完美的正方形4和9.但是在1 < - > 2 ^ 60或其他更大的数字之间呢.

这很慢

while(i*i<=n)
{
    sum+=i==((long long)(sqrt(i*i)));
    i++;
}
Run Code Online (Sandbox Code Playgroud)

其中n是2 ^ 60,我们从i = 2开始.

Ben*_*ley 41

x = (int)sqrt(n2) - (int)sqrt(n1);
Run Code Online (Sandbox Code Playgroud)

  • 你在哪里带这个配方本杰明? (3认同)
  • @amit:通过他的例子(1 < - > 10有2),低端是独家的. (2认同)

小智 12

它的琐碎.假设您有两个端点a和b,其中<b.

  1. 之后的下一个完美广场是什么?提示,什么是sqrt(a)?什么会四舍五入呢?

  2. 什么是最大的完美广场不超过b?提示,什么是sqrt(b)?再次,舍入如何帮助?

一旦你知道这两个数字,计算完美正方形的数量似乎真的微不足道.

顺便说一句,要小心.即使是2 ^ 60的sqrt也是一个很大的数字,尽管它会适合双倍.问题是2 ^ 60太大而不适合标准双,因为它超过2 ^ 53.所以要注意精度问题.


小智 5

不要迭代.等式:

floor(sqrt(b)) - ceil(sqrt(a)) + 1
Run Code Online (Sandbox Code Playgroud)

给出从a最高到b包含的区间中的完美正方形的数量.

https://en.wikipedia.org/wiki/Intermediate_value_theorem