我正在寻找最快的方法来确定一个long值是否是一个完美的正方形(即它的平方根是另一个整数):
Math.sqrt()
函数以简单的方式完成了它,但我想知道是否有办法通过将自己限制为仅整数域来更快地完成它.这是我现在正在做的非常简单直接的方式:
public final static boolean isPerfectSquare(long n)
{
if (n < 0)
return false;
long tst = (long)(Math.sqrt(n) + 0.5);
return tst*tst == n;
}
Run Code Online (Sandbox Code Playgroud)
注意:我在许多Project Euler问题中使用此函数.因此,没有其他人必须维护此代码.而这种微优化实际上可以产生影响,因为部分挑战是在不到一分钟的时间内完成每个算法,并且在某些问题中需要将此函数调用数百万次.
我尝试过不同的问题解决方案:
0.5不需要添加Math.sqrt()的结果,至少在我的机器上没有.Math.sqrt().这可能是因为Math.sqrt()使用类似牛顿方法的东西,但在硬件中实现,因此它比Java快得多.此外,牛顿的方法仍然需要使用双打.Math.sqrt().or在C++中使用语句比使用语句更快switch,但在Java和C#中,or和之间似乎没有区别switch.or我会说,而不是开关或声明if(lookup[(int)(n&0x3F)]) { test } else return false; …可能重复:
确定输入是否是完美正方形的好算法是什么?
我希望用最短最简单的方法来检查数字是否是C#中的完美平方
一些完美的正方形:
1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ......
Run Code Online (Sandbox Code Playgroud) 可能重复:
确定整数的平方根是否为整数的最快方法
有人知道逻辑找出一个数字是完美的正方形吗?(Other than Newtons Method or Synthetic Division Method)
For Eg:- 4, 16, 36, 64 are Perfect Squares.
Run Code Online (Sandbox Code Playgroud)
我将提供输入441,逻辑应该说它是否是完美广场.
这是亚马逊访谈中提出的一个问题.
我想用任何内置函数来完成它
你如何测试一个数字的平方根是否合理?
这甚至可能吗?
我需要这个,因为我需要弄清楚是否在我正在开发的数学应用程序中显示一个数字作为一个数字.
还有其他一些类似的问题,但它们似乎都没有做我想做的事情.我想传入一个字符串和查询列表
SELECT ownerid where sysid in ('', '', '') -- i.e. List<string>
Run Code Online (Sandbox Code Playgroud)
或者喜欢
var chiLst = new List<string>();
var parRec = Lnq.attlnks.Where(a => a.sysid IN chiList).Select(a => a.ownerid);
Run Code Online (Sandbox Code Playgroud)
我一直在玩a.sysid.Contains(),但却无法到达任何地方.
我怎么能写一个if-then语句检查输入的整数是否是一个完美的正方形(即如果我取平方根,它也是一个整数:4,9,16,25,36等. )在DrJava?谢谢!
这个问题是在后一个后续这里:确定一个整数的平方根是一个整数的最快方法,什么是好的算法,以确定是否输入是一个完美的正方形?.
其中一个帖子有这个解决方案来查找给定的数字是否是perfect square:
public final static boolean isPerfectSquare(long n)
{
if (n < 0)
return false;
switch((int)(n & 0xF))
{
case 0: case 1: case 4: case 9:
long tst = (long)Math.sqrt(n);
return tst*tst == n;
default:
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简洁的解决方案,完美无缺.但是没有详细解释它是如何工作的,或者更重要的是如何得出这个解决方案.我想如何推导出这个解决方案.
c# ×3
java ×2
math ×2
square-root ×2
algorithm ×1
drjava ×1
integer ×1
lambda ×1
linq ×1
objective-c ×1
optimization ×1