最简单的解决方案是对所有的对进行O(N的sqrtRoot)搜索,但是应该有一个更聪明的解决方案。。。
我被暗示使用一个线程二叉树知道吗?
最佳答案
如果你需要一个大概的数字,并且n足够大,你可以用o(1)来回答:如果你对非负(m,n)对感兴趣,只需回答pi*n*n/4;如果你允许负的回答pi*n*n。
注意到每对(m,n),使得m*m+n*n0,n>0对应于半径sqrt(n)的圆盘内的右上象限内的点这种四分之一圆盘的面积是π*n*n/4。每个点(m,n)对应一个1x1正方形。因此,您可以期望大约4个这样的对来覆盖四分之一磁盘的所有区域。
如果你需要一个精确的数字,那么我不知道有哪种算法能比O(sqrt(N))运行得更快。
关于algorithm - 给定数字N,如何计算所有m和n个int对的数量,使得m * m + n * n <N?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21638462/