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*r8*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)