Urutan Nomor Komposit
Terinspirasi oleh pertanyaan ini
Diberikan bilangan bulat positif n , kode Anda harus menampilkan angka komposit n pertama .
Input output
Anda dapat menulis program atau fungsi. Input melalui STDIN atau argumen fungsi dan output ke STDOUT, atau nilai pengembalian fungsi.
Output dapat berupa Daftar, Array, atau String.
Contohnya
0 ->
1 -> 4
2 -> 4, 6
3 -> 4, 6, 8
13 -> 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22
Aturan
Seperti biasa, celah standar tidak diizinkan.
Built-in yang menghasilkan bilangan prima atau gabungan tidak diizinkan.
Built-in yang berkaitan dengan bilangan prima atau gabungan tidak diizinkan.
Jawaban:
Pyth - 10 byte
Jawaban yang valid. Menggunakan Teorema Wilson .
Cobalah online di sini .
Jawaban lama
Pyth - 6 karakter
Menggunakan builtin untuk faktorisasi prima , bukan pengecekan prima.
Cobalah online di sini .
sumber
Pyth, 11 byte
Menghasilkan daftar produk yang terlalu besar dari semua kombinasi [2, n] dan truncate.
sumber
1
atau2
.TeX, 382 byte
Karena kamu bisa.
Angka di baris terakhir adalah jumlah angka gabungan yang ingin Anda miliki.
Ini adalah tester pembagi sederhana.
\d
memeriksa apakah#2
membagi#1
.\i
panggilan\d
untuk semua pembagi yang mungkin (yaitu <#1
).\l
daftar#2
angka pertama yang\i
mengembalikan 0.Versi tidak digolfkan (well, setengah golf):
sumber
Python, 57
Kurang golf:
Idenya adalah untuk menghasilkan himpunan bilangan komposit dengan mengalikan semua pasangan bilangan alami kecuali 0 dan 1. Kemudian, sortir himpunan ini, dan ambil
n
elemen pertama . Cukup dengan mengambil produk Cartesian dari himpunan{2, 3, ..., n+2}
itu sendiri, yang bisa kita dapatkan dengan menggeser kerange(n)
atas dengan 2.Untuk golf ini, kita melakukan trik golf klasik menyimpan dua nilai
(a,b)
dirange(n)
sebagai nilai tunggalk
dalamrange(n*n)
, dan ekstrak mereka sebagaia=k/n, b=k%n
.sumber
Java 8,
9897 byteDiperluas, dengan boilerplate:
sumber
R, 53 byte
Bagaimana itu bekerja
Ini juga didasarkan pada teorema Wilson dan yang dilakukannya hanyalah menjalankan rentang
1:n*n
dan mengekstraksi bilangan komposit sesuai dengan teorema yang disebutkan di atas. Saya telah menambahkan+3
karenan*n
rentangn < 3
bilangan bulat tidak cukup besarSatu-satunya masalah dengan solusi ini adalah (sayangnya) R kehilangan presisi untuk faktorial yang cukup besar, sehingga, ini tidak akan berfungsi dengan baik untuk
n > 19
sumber
CJam,
2018 byteCobalah online
Tidak menggunakan operator prima atau faktorisasi bawaan apa pun. Periksa kekuatan secara kasar untuk angka yang komposit.
Satu pengamatan yang digunakan di sini adalah bahwa kita dapat dengan mudah menghitung batas atas yang aman untuk angka yang harus kita uji. Karena setiap angka kedua yang lebih besar dari 4 adalah komposit,
4 + n * 2
adalah batas atas untuk nomor komposit ke-n.Berdasarkan saran dari @ Dennis, implementasi terbaru sebenarnya menggunakan
n * 5
sebagai batas atas, yang jauh lebih efisien, tetapi 2 byte lebih pendek.Penjelasan:
sumber
Javascript ES6, 88 karakter
sumber
f=
adalah legal.n=>eval('for(r=[],q=2;r.length-n;/^(..+)\\1+$/.test("-".repeat(++q))&&r.push(q))r')
n&&!r[n-1]
: '| Panjangnya sama denganr.length<n
- satu karakter lebih pendek darir.length!=n
- tetapi ini seharusnya Code Golf, kan? : -]Haskell,
4946 byteContoh penggunaan:
Bagaimana itu bekerja
sumber
F #, 78 byte
Dijelaskan:
sumber
i
dua kali. Saya tidak terlalu terbiasa dengan F #, tetapi tidak bisakah Anda menggunakannyaj
?C ++ 109
Tidak disatukan
sumber
while
denganfor
.Julia, 103 byte
Ini menggunakan Teorema Wilson.
Tidak Disatukan:
sumber
ECMAScript 6 -
1079184 byteFungsi mengembalikan array
n
angka komposit pertama .versi lama
Keluaran
sumber
Haskell , 44 byte
Sangat terilhami oleh jawaban Nimi sebelumnya , menggantikan predikat dengan yang lebih pendek 2-byte berdasarkan pada
any
lambda pointfree bukannya pemahaman daftar bersarang.Cobalah online!
( terima kasih kepada Laikoni untuk tautan TIO yang akurat)
Penjelasan:
sumber