Tujuan
Buat program / fungsi yang mengambil input N
, periksa apakah N
pasangan acak bilangan bulat relatif prima, dan kembali sqrt(6 * N / #coprime)
.
TL; DR
Tantangan-tantangan ini adalah simulasi algoritma yang hanya membutuhkan alam dan otak Anda (dan mungkin beberapa sumber daya yang dapat digunakan kembali) untuk memperkirakan Pi. Jika Anda benar-benar membutuhkan Pi selama kiamat zombie, metode ini tidak membuang - buang amunisi ! Ada delapan tantangan lagi yang akan datang. Periksa pos kotak pasir untuk membuat rekomendasi.
Simulasi
Apa yang kita simulasikan? Nah, probabilitas bahwa dua bilangan bulat acak relatif prima (yaitu coprime atau gcd == 1) adalah 6/Pi/Pi
, jadi cara alami untuk menghitung Pi adalah dengan meraup dua ember (atau beberapa genggam) batu; hitung mereka; lihat apakah gcd mereka adalah 1; ulangi. Setelah melakukan ini beberapa kali, sqrt(6.0 * total / num_coprimes)
akan cenderung ke arah Pi
. Jika menghitung akar kuadrat dalam dunia pasca-apokaliptik membuat Anda gugup, jangan khawatir! Ada Metode Newton untuk itu.
Bagaimana kita mensimulasikan ini?
- Ambil input
N
- Lakukan waktu berikut
N
:- Secara seragam menghasilkan bilangan bulat positif acak,
i
danj
- Dengan
1 <= i , j <= 10^6
- Jika
gcd(i , j) == 1
:result = 1
- Lain:
result = 0
- Secara seragam menghasilkan bilangan bulat positif acak,
- Ambil jumlah
N
hasil,S
- Kembali
sqrt(6 * N / S)
Spesifikasi
- Memasukkan
- Fleksibel, mengambil input dengan cara standar apa pun (mis. Parameter fungsi, STDIN) dan dalam format standar apa pun (mis. String, Binary)
- Keluaran
- Fleksibel, memberikan hasil dengan cara standar apa pun (mis. Mengembalikan, mencetak)
- Ruang putih, trailing dan ruang putih utama dapat diterima
- Akurasi, harap berikan setidaknya 4 tempat desimal akurasi (yaitu
3.1416
)
- Mencetak gol
- Kode terpendek menang!
Uji Kasus
Output Anda mungkin tidak sejalan dengan ini, karena kebetulan acak. Tetapi rata-rata, Anda harus mendapatkan akurasi sebanyak ini untuk nilai yang diberikan N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
atau apakah itu ok jika program kembali misalnya stack overflow jikaN
terlalu besar?