Pi adalah bilangan irasional , yang berarti bahwa representasi desimalnya tidak pernah berakhir atau terulang.
Pi terpotong menjadi 41 angka desimal (40 tempat) 3.1415926535897932384626433832795028841971
.
Jika kita mengabaikan titik desimal dan mendaftar angka sebagai urutan bilangan bulat positif, menghindari duplikat , kita dapatkan 3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971
( OEIS A064809 ).
(Perhatikan yang 15
muncul dalam urutan bukan 1 5
karena 1
sudah terjadi.
Juga perhatikan yang 0
tidak terjadi karena tidak positif; 950
berisi nol pertama.)
Untuk membangun angka pirasional pertama, kami menggunakan urutan ini untuk mengindeks ke dalam digit Pi (digit pertama adalah 3, angka kedua 1, dll.).
Jadi digit pertama dari angka pirrasional pertama adalah digit ke-3 Pi,
digit kedua adalah digit pertama Pi,
digit ketiga adalah digit ke-4 Pi, digit
keempat adalah digit ke - 15 Pi,
dan seterusnya.
Titik desimal ditambahkan setelah digit pertama untuk meniru Pi.
Dengan demikian angka pirrasional pertama hingga 41 digit adalah 4.3195195867462520687356193644029372991880
.
(Perhatikan bahwa untuk digit ke-30 saya harus terus ke digit ke-974 dari Pi.)
Untuk membangun bilangan pirasional kedua, prosesnya diulangi menggunakan bilangan pirasional pertama alih-alih Pi. (Pi itu sendiri dapat disebut angka pirerasional nol). Jadi urutan baru adalah 4 3 1 9 5 19 58 ...
dan nomor piirasional pertama diindeks untuk menghasilkan yang kedua, yang dimulai 9.14858...
.
Bilangan pirasional lebih lanjut dibuat dengan cara yang sama, masing-masing dihasilkan dari yang sebelumnya.
Tantangan
Tugas Anda adalah menulis program sesingkat mungkin yang menggunakan dua bilangan bulat, N
dan D
, dan menampilkan N
bilangan pirasional ke D
angka desimal.
D
selalu positif tetapi N
tidak negatif, dan D
angka-angka Pi harus dikeluarkan ketika N
0.
Ketika D
1 adalah tidak masalah apakah titik desimal ada atau tidak.
Input harus berasal dari stdin atau baris perintah dan output harus pergi ke stdout (atau alternatif terdekat bahasa Anda).
Program Anda harus bekerja untuk semua nilai input dari N
dan di D
bawah 2 16 , tetapi tidak harus tepat waktu atau efisien.
Kode terpendek dalam byte menang.
(Perhatikan bahwa angka-angka pembajakan keluar di pangkalan lain, tetapi segala sesuatu dalam tantangan ini dilakukan di pangkalan 10.)
N=1
, D=13393
misalnya, Anda akan perlu digit 31 sepersejuta PI