给定数N,如何计算所有m和n int对的数量,使得m * m + n * n <1。 N +

时间:2014-02-07 21:53:04

标签: algorithm binary-tree

天真的解决方案是使用O(sqrtRoot of N)搜索所有对,但应该有一个更智能的解决方案......

我被暗示使用线程二叉树......任何想法?

1 个答案:

答案 0 :(得分:3)

如果你需要一个大概数字,并且N足够大,你可以在O(1)中回答:如果你对非负(m,n)对感兴趣,只需回复pi * N * N / 4;如果你允许否定回复pi * N * N。

注意到每对(m,n)使得m * m + n * n 0,n> 0对应于半径为sqrt(N)的盘内的右上象限内的点。这种四分之一盘的面积是pi * N * N / 4。每个点(m,n)对应1x1平方。因此,您可以预期大约pi * N * N / 4这样的对覆盖四分之一盘的所有区域。

如果你需要一个精确的数字,那么我不知道任何比O(sqrt(N))运行得更快的算法。