在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)
小智 12
它的琐碎.假设您有两个端点a和b,其中<b.
之后的下一个完美广场是什么?提示,什么是sqrt(a)?什么会四舍五入呢?
什么是最大的完美广场不超过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