Tugas
Tulis program atau fungsi yang, ketika melewati input numerik x
, mencetak atau mengembalikan bilangan prima di bawah akar kuadrat x
1 yang bukan merupakan faktor x
.
Contohnya
Biarkan f(x)
menjadi fungsi yang disebut:
>>> f(4)
[]
>>> f(5)
[2]
>>> f(20)
[3]
>>> f(60)
[7]
>>> f(100)
[3, 7]
>>> f(10000)
[3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Aturan Bonus
- Anda dapat menggunakan bawaan apa pun yang disediakan bahasa Anda.
- Program Anda harus mendukung
x
input setinggi batas atas yang ditentukan oleh bahasa Anda.
1 Menggunakan akar kuadrat karena hanya bilangan prima di bawah akar kuadrat sebenarnya dapat terlibat dalam faktor x
. Tanpa membuat batasan ini, angka yang lebih besar akan memiliki banyak angka cetak berlebih.
x
" tidak benar: angka dapat memiliki satu faktor utama yang lebih besar dari akar kuadratnya. Memang, dua contoh pertama Anda (5 dan 20) memiliki properti ini, seperti halnya semua bilangan prima, dua kali semua bilangan prima, ....Jawaban:
Jelly, 6 byte dalam codepage Jelly
Cobalah online!
Penjelasan:
sumber
MATL ,
109 byteCobalah online!
Penjelasan
sumber
Python 3 ,
6762 byteCobalah online!
sumber
MATLAB,
5754 byteCukup mudah, dapatkan array bilangan prima hingga sqrt (p) kemudian menghapus semua yang juga merupakan faktor p. Mencetak output dari baris terakhir secara default karena titik koma tidak digunakan.
sumber
Pyth, 10 byte
Program yang mengambil input nomor dan mencetak daftar.
Suite uji
Bagaimana itu bekerja
sumber
05AB1E , 8 byte
Cobalah online!
Penjelasan
sumber
PHP, 76 byte
menggunakan solusi is_prime saya yang di-golf dengan $ n> 1
mengambil input dari argumen baris perintah. Jalankan dengan
-r
.sumber
Mathematica, 46 byte
Fungsi anonim. Mengambil angka sebagai input dan mengembalikan daftar angka sebagai output. Karakter Unicode adalah U + 2223 DIVIDES untuk
\[Divides]
.sumber
Ruby, 55 byte
Jawaban yang agak malas menggunakan enumerator utama bawaan.
sumber
Bertanya-tanya , 14 byte
Pemakaian:
Mengambil item dari daftar bilangan prima yang tak terbatas sementara item kurang dari akar kuadrat dari argumen.
sumber
Pyke, 10 byte
Coba di sini!
sumber
PowerShell v2 +, 71 byte
Solusi berulang. Mengambil input
$n
dan membuat rentang dari1
keSqrt($n)
(perhatikan bahwa operator rentang secara implisit akan melemparkan ujung atas ke[int]
yang akan melakukan Pembulatan Banker secara default). Kemudian penggunaan|?{...}
(yangWhere-Object
operator, yang bertindak seperti filter) untuk menarik keluar angka-angka di mana$n%$_
non-nol (yaitu, setiap sisanya untuk sarana Modulo itu bukan faktor, dan setiap non-nol adalah truthy)-and
yang tes perdana regex biasa adalah$true
. Itu dibiarkan di dalam pipa, dan hasilnya implisit.Contohnya
(dengan beberapa format tambahan untuk menambah output)
NB - Ini akan gagal pada versi sebelumnya jika input lebih besar dari sekitar
2500000000
, karena..
operator jangkauan hanya dapat mendukung hingga 50.000 item. Tapi, karena itu lebih besar dari[int]
nilai maks datatype default2147483647
,, saya anggap itu OK. Di komputer saya, PSv4 Win8.1, bagaimanapun, saya bisa naik lebih tinggi, tapi saya tidak dapat menemukan dokumentasi yang menjelaskan perbedaannya.sumber
JavaScript (ES6),
7976 byteBerdasarkan pada fungsi tes primality rekursif saya . Saya merasa harus ada beberapa cara untuk menyederhanakan ini, tapi saya tidak tahu bagaimana ...
Cuplikan tes
sumber
Oktaf, 44 byte
Jawaban ini terinspirasi oleh jawaban MATLAB dari MattWH , tetapi saya telah menggunakannya dengan menggunakan beberapa fitur khusus Oktaf.
Ini adalah fungsi anonim yang mengambil input
x
. Oktaf memiliki penugasan variabel inline dan pengindeksan yang memungkinkany
untuk pertama kali dibuat dalam fungsi (tidak mungkin di MATLAB), kemudian digunakan sebagai bagian dari topeng logis yang dibuat olehismember
(sekali lagi, tidak mungkin melakukannya dengan cara ini di MATLAB).sumber
Perl 6 , 37 byte
Diperluas:
sumber
TSQL, 130 byte
Ini hanya akan mengeksekusi sekali, maka Anda perlu menjatuhkan tabel temp untuk mengeksekusi lagi di editor yang sama
Saya membuat versi untuk mengujinya, ini sedikit lebih lama karena izin online untuk membuat tabel tidak tersedia. Untuk alasan yang sama, tidak perlu drop table.
Cobalah online
sumber
R,
5863 byteSimpulkan semua nilai dari 2 hingga
sqrt(x)
dan periksa apakah semuanya prima dengannumbers
paket.x%%i
menghitungx mod i
yang0 -> False
jikai
merupakan pembagi darix
dan>0 -> True
jikai
tidak.+5 byte karena
numbers::Primes(n)
fungsinya tidak memungkinkan desimal, sementara2:sqrt(x)
berfungsi, menambahkan pemeriksaan prima padaif
pernyataan.sumber
Haskell,
5554 byteSebagian besar daftar pemahaman bersarang langsung. GCD melakukan dua peran, menguji apakah angka-angka di bawah y adalah faktor y dan juga menguji apakah y adalah faktor x.
Ditempatkan sedikit:
sumber
gcd(z*x)y>1
.Retina ,
6966 byteMencetak bilangan prima pada garis yang terpisah, dari yang terbesar ke yang terkecil.
Cobalah online! (Membutuhkan waktu sekitar 10 detik karena dua kasus pengujian terakhir. Header dan footer memungkinkan suite pengujian linefeed-terpisah, dan mengubah output menjadi koma-pemisahan untuk keterbacaan.)
Penjelasan
Konversikan input ke unary.
Ini mendahului akar kuadrat dari input, dipisahkan oleh
:
. Akar kuadrat dihitung berdasarkan fakta bahwa kuadratn
juga merupakan jumlah darin
bilangan bulat ganjil pertama . Kami dapat mencocokkan bilangan bulat aneh berurutan dengan referensi maju(11\1|^1)
. Dalam prosesnya kelompok akan digunakan tepatn
waktu, di manan
adalah angka terbesar yang kuadratnya sesuai dengan input.Kami memasukkan representasi unary dari nomor ini dengan
$#1$*1
, diikuti oleh titik dua dan pertandingan itu sendiri.Ini cocok dengan semua bilangan prima yang hilang yang cocok dengan akar kuadrat. Deteksi utama didasarkan pada regex pengecekan prime prima , dan kemudian kami hanya memastikan bahwa prime yang baru saja kami tangkap tidak membagi input dengan lookahead kedua. Dengan menggunakan
&
opsi, kami mendapatkan pertandingan yang tumpang tindih untuk memastikan bahwa kami mendapatkan semua bilangan prima.Ini mengkonversi setiap baris (yaitu setiap prime yang hilang) kembali ke desimal dengan mencocokkan jumlah
1
s. Satu-satunya masalah adalah bahwa ini memasukkan nol jika tidak ada bilangan prima yang hilang ditemukan sama sekali.Jadi tahap ini menghilangkan nol itu jika ditambahkan.
sumber