f=lambda r,x=0:r-x and-~((r*r-x*x)**.5%1>0)*4+f(r,x+1)
온라인으로 사용해보십시오!
덜 골프 (55 바이트) ( TIO )
lambda r:8*r-4*sum((r*r-x*x)**.5%1==0for x in range(r))
출력을로 추정 8*r
한 다음 정점 교차를 수정합니다. 결과는입니다 8*r-g(r*r)
. 여기서 두 제곱의 합으로 쓰는 방법g(x)
의 수를x
계산합니다 (제외 g(0)=0
).
원이 꼭짓점을 통과하지 않으면 터치 한 셀 수는 교차 된 가장자리 수와 같습니다. 원은 2*r
세로 눈금 선과 2*r
가로 눈금 선을 통과하여 각 방향을 양방향으로 통과합니다 8*r
.
그러나 정점에서 각각의 교차점은 하나의 새 셀에만 들어가는 동안 두 개의 교차점으로 계산됩니다. 따라서 정점 교차 수를 빼서 보상합니다. 이 축에 포인트를 원하는 포함 (r,0)
피타고라스 같이 세배뿐만 아니라 (4,3)
위한 r=5
.
우리는 하나의 사분면의 점을 계산 (x,y)
에 x>=0
와 y>0
함께 x*x+y*y==n
다음 곱하기 4로 우리의 numer에 계산하여이 작업을 수행 sqrt(r*r-x*x)
하기위한 그 정수를하는 x
간격 [0,r)
.