如何找到2个数字之间的整数

时间:2017-07-18 14:52:06

标签: algorithm language-agnostic

我想找到两个数字A,B之间的完美平方(数字可以是正数/负数)。我也希望实现O的时间复杂度(sqrt(abs(B)))。

我为此编写了以下代码:

count = (int)(Math.floor(Math.sqrt(Math.abs(B)) - Math.ceil(Math.sqrt(Math.abs(A))) + 1);

这通常效果很好但是当范围在-ve和+ ve数之间时会失败。

例如,范围是A = -1,B = 1.然后我认为它应该返回2(0,1)但返回1.

我在SO中的其他答案中找不到解决方案。所以,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我们假设A,B≥0。

然后A≤n²≤B相当于√A≤n≤√B和ceil(√A)≤n≤floor(√B)。

因此,解决方案的数量为楼层(√B) - ceil(√A)+ 1.

如果A&lt; 0,将A替换为0.然后,如果B <0。 A,没有解决方案。

@Bathsheba更新

最后,如果您不希望0被视为完美的正方形,则将“如果A <0,将A替换为0”替换为“如果A&lt; 1,则将A替换为1”。

答案 1 :(得分:1)

没有完美的正方形(除非我们将i的数字从-infinity考虑为0.所以你可以/应该在负起始数上抛出IllegalArgumentException,或者只是将start设置为0。