0. DEFINISI
Sebuah urutan adalah daftar nomor.
Sebuah seri adalah jumlah daftar nomor.
Himpunan bilangan alami berisi semua "bilangan bulat non-negatif lebih besar dari nol".
Sebuah pembagi (dalam konteks ini) dari nomor alam j adalah nomor alam i , sehingga j ÷ saya juga sejumlah alami.
1. MUNGKIN
Beberapa pertanyaan lain di situs ini menyebutkan konsep alikuot, atau urutan pembagi bilangan asli a yang kurang dari a . Menentukan angka damai melibatkan menghitung jumlah pembagi ini, yang disebut jumlah alikuot atau seri alikuot. Setiap bilangan asli memiliki jumlah alikuotnya sendiri, meskipun nilai jumlah alikuot angka tidak selalu unik untuk angka itu. ( Exempli gratia , setiap bilangan prima memiliki jumlah alikuot 1.)
2. TANTANGAN
Dengan diberi nomor alami n
, kembalikan n
digit ke-urutan dari jumlah alikuot. Beberapa seri pertama dalam urutan, dimulai dengan seri untuk 1, adalah:
{0, 1, 1, 3, 1, 6, 1, 7, 4, 8, 1, 16, 1, 10, 9, 15, 1, 21, 1, 22, 11, 14, 1, 36, 6, 16, 13}
Digabungkan, ini terlihat seperti:
0113161748116110915121122111413661613
Input dapat diindeks nol atau diindeks satu, sesuai dengan preferensi Anda. Solusi harus berupa program atau fungsi yang mampu mengembalikan angka 10.000 (input hingga 9999
atau 10000
). Solusi kerja terpendek menang.
3. KASUS UJI
Pasangan input-output yang benar harus mencakup, tetapi tidak terbatas pada, hal-hal berikut:
0 or 1 -> 0
4 or 5 -> 1
12 or 13 -> 6
9999 or 10000 -> 7
Angka sebelum "atau" diindeks 0; nomor berikut adalah 1-diindeks.
Kasus uji tambahan dapat disediakan berdasarkan permintaan.
4. REFERENSI
OEIS memiliki daftar angka dan jumlah alikuotnya.
Jawaban:
05AB1E ,
141110 byteHitung n = 9999 dalam waktu sekitar 15 detik. Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Mathematica, 51 byte
Fungsi tanpa nama yang mengambil dan mengembalikan integer dan menggunakan pengindeksan berbasis 1. Menangani input secara
10000
instan.Penjelasan
Ini adalah implementasi definisi yang sangat mudah, memanfaatkan fakta bahwa
n
jumlah pembagi pertama selalu cukup untuk menentukann
digit ke-4. Seperti biasa, urutan bacaan Mathematica golf agak lucu:Ini menghasilkan daftar dengan semua hasil penerapan fungsi yang tidak disebutkan namanya di sebelah kiri untuk semua nilai
i
dari1
hinggan
inklusif.Kita mulai dengan menghitung pembagi
i
, menjumlahkannya denganTr
dan mengurangii
sendiri sehingga hanya jumlah pembagi yang kurang darii
.Ini mengubah hasilnya menjadi daftar angka desimalnya.
Dan ini menghilangkan kepala "daftar", sehingga semua daftar digit secara otomatis digabungkan dalam hasil
Array
. Untuk detail lebih lanjut tentang cara##
kerjanya, lihat bagian "Urutan argumen" di posting ini .Akhirnya, kami memilih
n
digit th dari hasilnya.sumber
Brachylog , 40 byte
Ini 1-diindeks, membutuhkan sekitar 0,15 detik untuk
N = 100
, 15 detik untukN = 1000
. Saat ini saya sedang menjalankanN = 10000
, saya akan melaporkan waktu berjalan setelah berakhir (Jika perkiraan saya benar, ini akan memakan waktu sekitar 8 jam)Sunting : dengan memperbaiki propagasi kendala prematur di Brachylog, sekarang (pada kode 3 byte lebih lama) membutuhkan waktu
2.5
beberapa menit untuk10000
tetapi mengembalikanout of global stack
kesalahan.Penjelasan
Predikat Utama:
Input = N
Predikat 1: menghitung jumlah pembagi
Predikat 2: menyatukan output dengan pembagi input
sumber
-G
opsi. Standarnya hanya128M
. Anda dapat menggunakan misalnya:swipl -G2G
untuk menggunakan 2 GO.Pyth,
26212015 byteCobalah online. Suite uji.
Menggunakan pengindeksan berbasis 0. Program ini O (n²) dan selesai untuk n = 9999 dalam waktu sekitar 14 menit pada mesin 2008 saya.
sumber
f!%dTr1d
jauh lebih pendek (tetapi juga lebih lambat)f!%TYtUT
adalah apa yang saya miliki.Jelly,
131110 byte2 byte berkat @Adnan dan 1 lagi berkat @Dennis.
Cobalah online!
Menggunakan pengindeksan berbasis 1. Selesaikan untuk n = 10.000 dalam waktu kurang dari 2 detik online.
sumber
ÆDṖSDµ€Fị@
menghemat satu byte.€
untuk seluruh rantai pertama?€
diterapkanchain.pop() if chain else chains.pop()
. Rantai yang baru mulai kosong, jadi rantai yang terakhir selesai digunakan sebagai gantinya.PHP, 90 byte
0 diindeks
Sama sekali tidak halus atau dengan cara yang pintar mendekati itu sama sekali.
Juga, seperti biasa, menghasilkan tiga pemberitahuan yang diabaikan.
sumber
J , 34 byte
Ini adalah indeks-nol dan menggunakan rumus di bawah ini untuk menghitung jumlah pembagi.
Penjelasan
sumber
MATL ,
1615 bytePengindeksan adalah berbasis 1.
Kasing uji terakhir kali habis dalam kompiler online, tetapi hasilnya memberikan hasil yang benar dengan kompiler offline, dalam waktu sekitar 15 detik.
Cobalah online!
sumber
Haskell, 52 byte
Contoh penggunaan:
(([1..]>>= \n->show$sum[m|m<-[1..n-1],mod n m<1])!!) 12
->6
.Ini adalah implementasi langsung dari definisi: foreach
n
sum pembagi itu dan mengubahnya menjadi string. Gabungkan semua string tersebut dan pilih elemen pada indeks yang diminta. Kemalasan Haskell hanya mengambil sebanyakn
dari daftar yang tak terbatas[1..]
sesuai kebutuhan.sumber
Python 3.5,
1039392 byte:Implementasi metode yang cukup mudah dijelaskan dalam posting.
Cobalah secara Online! (Ideone)
Tidak cukup selesai dalam 5 detik yang dialokasikan dalam kompiler online untuk input
10000
, tetapi selesai pada mesin saya untuk input yang sama dalam waktu sekitar 8,5 detik.sumber
Oktaf, 71 byte
Yang ini hanya oktaf. Ini tidak akan berfungsi di MATLAB. Fungsi virtual dibuat yang berfungsi pada angka 1-diindeks. Ini mungkin dapat disederhanakan sedikit lebih jauh. Akan lihat malam ini.
Anda dapat mencoba online di sini .
Cukup jalankan perintah di atas, diawali dengan
a=
atau apa pun (hanya agar Anda dapat menggunakannya beberapa kali), lalu lakukana(10000)
atau apa pun. Diperlukan sekitar 7 detik untuk menghitung bahwa angka ke-10.000 adalah angka 7.sumber
Java 8, 220 byte
Yah, setidaknya cepat. Rata-rata 0,3 detik untuk mendapatkan elemen 9999 / 10.000 di mesin saya. Ini hanya menghasilkan jumlah alikuot sebanyak indeks yang Anda tentukan. Ini berarti string akan sedikit lebih panjang daripada indeks Anda dalam kebanyakan kasus, karena beberapa jumlah alikuot memiliki 2 digit atau lebih, tetapi untuk sebagian besar, string hanya menghasilkan string sepanjang yang kami butuhkan.
Pemakaian:
Tidak Terkumpul:
sumber