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).