เป้าหมาย
สร้างโปรแกรม / ฟังก์ชั่นที่รับอินพุตN
ตรวจสอบว่าN
คู่ของจำนวนเต็มแบบสุ่มนั้นค่อนข้างดีและส่งคืนsqrt(6 * N / #coprime)
หรือไม่
TL; DR
ความท้าทายเหล่านี้เป็นการจำลองอัลกอริธึมที่ต้องการเพียงแค่ธรรมชาติและสมองของคุณ หากคุณต้องการ Pi ในระหว่างการเปิดเผยซอมบี้วิธีการเหล่านี้จะไม่เปลืองกระสุน ! มีอีกแปดความท้าทายที่จะมา ชำระเงินโพสต์แซนด์บ็อกซ์เพื่อให้คำแนะนำ
การจำลอง
เรากำลังจำลองอะไร ความน่าจะเป็นที่สองจำนวนเต็มแบบสุ่มนั้นค่อนข้างไพเราะ (เช่น coprime หรือ gcd == 1) 6/Pi/Pi
ดังนั้นวิธีธรรมชาติในการคำนวณ Pi ก็คือการตักก้อนหินขึ้นสองถัง (หรือกำมือ) นับพวกเขา; ดูว่าgcdของพวกเขาคือ 1; ทำซ้ำ หลังจากที่ทำเช่นนี้คู่หลายครั้งจะมีแนวโน้มต่อsqrt(6.0 * total / num_coprimes)
Pi
หากการคำนวณสแควร์รูทในโลกหลังวิกฤติทำให้คุณกังวลไม่ต้องกังวล! มีวิธีการของนิวตันสำหรับสิ่งนั้น
เราจำลองสิ่งนี้ได้อย่างไร
- รับอินพุต
N
- ทำตาม
N
เวลาต่อไปนี้:- สร้างเลขจำนวนเต็มบวกแบบสุ่ม
i
และj
- กับ
1 <= i , j <= 10^6
- ถ้า
gcd(i , j) == 1
:result = 1
- อื่น:
result = 0
- สร้างเลขจำนวนเต็มบวกแบบสุ่ม
- รับผลรวมของ
N
ผลลัพธ์S
- กลับ
sqrt(6 * N / S)
สเปค
- อินพุต
- ยืดหยุ่นรับอินพุตด้วยวิธีมาตรฐานใด ๆ (เช่นพารามิเตอร์ฟังก์ชัน STDIN) และในรูปแบบมาตรฐานใด ๆ (เช่น String, Binary)
- เอาท์พุต
- ยืดหยุ่นให้ผลลัพธ์ในรูปแบบมาตรฐาน (เช่นผลตอบแทนการพิมพ์)
- พื้นที่สีขาวพื้นที่ต่อท้ายและพื้นที่สีขาวชั้นนำเป็นที่ยอมรับ
- ความแม่นยำโปรดระบุความแม่นยำอย่างน้อย 4 ตำแหน่ง (เช่น
3.1416
)
- เกณฑ์การให้คะแนน
- รหัสที่สั้นที่สุดชนะ!
กรณีทดสอบ
ผลลัพธ์ของคุณอาจไม่ตรงกับสิ่งเหล่านี้เนื่องจากมีโอกาสสุ่ม N
แต่โดยเฉลี่ยแล้วคุณควรจะได้รับเกี่ยวกับความถูกต้องมากขนาดนี้สำหรับค่าที่กำหนด
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
มิฉะนั้นคุณต้องจัดการ
N = 1000000
หรือไม่เป็นไรถ้าโปรแกรมส่งคืนเช่นสแต็กN
มากเกินไปหากใหญ่เกินไป?