容易看出$(x -2^{N-1})^2 + (y-2^{N-1})^2\le2^{2N-2}$对应的$(x,y)$是圆形内部的格点,四个区域可以相互通过水平和垂直的对称变换得到。
记C为点$(2^{N-1},2^{N-1})$,用$(x,y,z)$表示距离C最近的角的坐标是$(x,y)$,且大小为z的正方形区域,递归计算即可得结果$313135496$。
bound=1<<46
m=1<<23
def check(x,y,z):
if (x-m)*(x-m)+(y-m)*(y-m)>bound or (x+z-1-m)*(x+z-1-m)+(y+z-1-m)*(y+z-1-m)<=bound:
return 2
if z==2:
return 9
z/=2
return check(x,y,z)+check(x+z,y+z,z)+check(x+z,y,z)+check(x,y+z,z)+1
print check(m,m,m)+check(m+1,m,m)*2+check(m+1,m+1,m)+1
|