完美平方数的例子是1,4,9,16,25....
我们如何计算非常大的数字(例如 10 pow 20)的所有完美平方数。对于 10 pow 20,有 10 个 pow 10 完美平方数。
到目前为止我所做的......
Bruteforce:计算 x**2 在 1 到 10 pow 10 的范围内。因为我的系统只接受 10 pow 6。这不起作用。
两个指针的方法:我已经取了上限和下限....
上限为 10 pow 20
下界为 1
现在,我拿了两个指针,一个在开始,另一个在结束。然后下界的下一个完美正方形将是
下限 + (sqrt(下限) *2+1)
示例:对于 4 下一个完美正方形是
4 + (sqrt(4)*2+1)= 9
以同样的方式上限将减少
上限 - (sqrt(上限) *2-1)
示例:对于 25,之前的完美正方形是
25 - (sqrt(25)*2-1) =16
上述两种方法都不能很好地工作,因为上限是非常非常大的数字 10 pow 20。
我们怎样才能在更短的时间内有效地计算出所有完美的平方,直到 10 pow 20 ?