Tulis fungsi atau program lengkap yang mengambil angka positif n
dan melakukan n
langkah-langkah algoritma iteratif untuk menghitung π yang memiliki konvergensi kuadratik (yaitu kira-kira menggandakan jumlah digit akurat di setiap iterasi) kemudian mengembalikan atau mencetak 2 n digit yang benar (termasuk awal 3). Salah satu algoritma tersebut adalah algoritma Gauss-Legendre , tetapi Anda bebas menggunakan algoritma yang berbeda jika Anda mau.
Contoh:
masukan 1
→ keluaran 3.1
masukan 2
→ keluaran 3.141
masukan 5
→ keluaran3.1415926535897932384626433832795
Persyaratan:
- Setiap iterasi algoritma harus melakukan sejumlah operasi dasar yang konstan seperti penjumlahan, pengurangan, penggandaan, pembagian, daya dan root (dengan eksponen bilangan / derajat) - setiap operasi seperti pada bilangan bulat / angka desimal "besar" dihitung sebagai satu genap jika itu melibatkan satu atau lebih loop internal. Agar jelas, fungsi dan kekuatan trigonometri yang melibatkan bilangan kompleks bukanlah operasi dasar.
- Algoritma ini diharapkan memiliki langkah inisialisasi yang juga harus memiliki jumlah operasi yang konstan.
- Jika algoritme membutuhkan 1 atau 2 iterasi lebih banyak untuk mendapatkan 2 n digit yang benar, Anda dapat melakukan
n+2
iterasi bukan hanyan
. - Jika itu tidak cukup jelas, setelah 2 n digit yang benar, program Anda tidak boleh mencetak yang lain (seperti angka yang lebih benar, angka yang salah atau karya Shakespeare yang lengkap).
- Program Anda harus mendukung nilai
n
dari 1 hingga setidaknya 20. - Program Anda seharusnya tidak perlu lebih dari satu jam untuk
n
= 20 pada komputer modern (bukan aturan keras, tetapi cobalah untuk membuatnya masuk akal). - Program tidak boleh mendapatkan lebih dari 20 digit akurat setelah inisialisasi dan iterasi pertama algoritma.
- Program harus dapat dijalankan di Linux menggunakan perangkat lunak yang tersedia secara bebas.
- Kode sumber harus hanya menggunakan karakter ASCII.
Mencetak:
Golf kode langsung, kode terpendek menang.
Pemenang:
Pemenangnya adalah Digital Trauma, saya akhirnya selesai menjalankan kodenya pada n = 20 (hanya bercanda). Hadiah spesial diberikan kepada Primo untuk solusi python yang sangat cepat dan algoritma yang berbeda :)
~q^(n^2)
sesuai dengan bagian 1 di sana dan ~q^2
menurut bagian 2 di sana.