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)