资料来源:2011年Facebook黑客杯 资格赛
双平方数是整数X,可以表示为两个正方形的总和.例如,10是双平方,因为10 = 3 2 + 1 2.给定X,我们如何确定它可以写成两个方格之和的方式?例如,10只能写为3 2 + 1 2(我们不将1 2 + 3 2视为不同).另一方面,25可以写为5 2 + 0 2或4 2 + 3 2.
你需要解决0≤X≤2,147,483,647这个问题.
例子:
小智 6
这是我O(sqrt(n))
复杂的简单答案
x^2 + y^2 = n
x^2 = n-y^2
x = sqrt(n - y^2)
Run Code Online (Sandbox Code Playgroud)
x应该是整数,所以(n-y^2)
应该是完美的正方形.循环y=[0, sqrt(n)]
并检查是否(n-y^2)
是完美的正方形
伪代码:
count = 0;
for y in range(0, sqrt(n))
if( isPerfectSquare(n - y^2))
count++
return count/2
Run Code Online (Sandbox Code Playgroud)