Salah satu definisi favorit saya tentang bilangan prima adalah sebagai berikut:
2 adalah prime terkecil.
Angka yang lebih besar dari 2 adalah bilangan prima jika tidak dapat dibagi dengan bilangan prima yang lebih kecil.
Namun definisi ini tampaknya arbitrer, mengapa 2? Kenapa tidak nomor lain? Baiklah mari kita coba beberapa angka lain yang akan mendefinisikan n-prime sedemikian rupa
n adalah n-prime terkecil.
Angka yang lebih besar dari n adalah n-prime jika tidak dapat dibagi oleh n-prime yang lebih kecil.
Tugas
Tugas di sini adalah untuk menulis sebuah program yang mengambil dua input, bilangan bulat positif n dan positif bilangan bulat a . Maka akan memutuskan apakah a adalah n -prime. Program Anda harus menampilkan dua nilai berbeda satu untuk "ya, ini n-prime" dan satu untuk "tidak, itu bukan n-prime".
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte dengan lebih sedikit byte menjadi lebih baik.
Tes
Berikut adalah daftar 31 bilangan prima pertama untuk n = 2 hingga n = 12 (1 adalah satu-satunya bilangan prima)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
sumber
n=6, a=15
adalah kasus uji menarik pertama.Jawaban:
Haskell , 45 byte
Cobalah online!
Saya mendefinisikan fungsi rekursif yang bagus
(!)
:n!a
memeriksa apakah ada faktora
, dalam kisaran[n,a-1]
, adalahn-prime
. Maka itu meniadakan hasilnya. Itu juga memastikan itun>a
sumber
Python 2 ,
3937 byteTerima kasih kepada Halvard Hummel untuk -2 byte.
Cobalah online!
sumber
Python 3 , 45 byte
Cobalah online!
Bagaimana itu bekerja
Ini mengambil dua bilangan bulat sebagai input, i dan k . Pertama memeriksa apakah k ≥ i . Kemudian menghasilkan kisaran [i, k) dan untuk setiap bilangan bulat N dalam rentang ini, memeriksa apakah N adalah coprime ke k . Jika kedua kondisi terpenuhi, maka k adalah i -prime.
sumber
&
sebagai gantiand
dan>=i
bukan>i-1
?>=i
masih 4 byte (karena ruang).&
Anda tidak perlu ruang.Sekam ,
65 byteCobalah online! atau lihat hasilnya hingga 80 .
Terima kasih kepada Leo untuk -1 byte.
Penjelasan
sumber
R ,
4437 byteCobalah online!
-7 byte terima kasih kepada Giuseppe
Kembali
TRUE
jikaa
sama dengann
atau (a==n|
)a
lebih besar darin
dan (a>n&
) untuk setiap angka k darin
hinggaa-1
,a
tidak habis dibagi oleh k (all(a%%n:(a-1))
)Kembali
FALSE
sebaliknyasumber
J, 30 byte
Cobalah online!
Mengambil nilai awal sebagai argumen kanan dan nilai untuk memeriksa argumen kiri.
Saya awalnya mengacaukan dan tidak memperhitungkan argumen kiri kurang dari perdana. Saya agak tidak senang dengan panjang solusi saya sekarang.
Penjelasan
Membiarkan
x
menjadi argumen kiri (nilai untuk memeriksa) dany
menjadi argumen yang tepat (perdana awal).Catatan
Elemen pada posisi
x-y
adalah hasil pengujian primality untukx
(karena kami menambahkany
ke rentang asli).Mengalikan dengan
x >: y
memastikan bahwa kami mendapatkan nilai falsey (0
)x
kurang dariy
.sumber
JavaScript (ES6),
333230 byteMengambil input dalam sintaks currying
(n)(a)
. Mengembalikan boolean.Demo
Tampilkan cuplikan kode
sumber
Haskell , 30 byte
2 byte disimpan berkat ide H.Piz yang dipinjam dari jawaban flawr
Cobalah online!
Ok sejak lama, dan satu-satunya jawaban Haskell sejauh ini adalah 45 btyes, saya memutuskan untuk mengirim jawaban saya sendiri.
Penjelasan
Fungsi pemeriksaan ini bahwa satu-satunya angka antara n dan sebuah yang sebuah habis dibagi adalah sebuah sendirinya.
Sekarang definisi hanya menyebutkan n -primes lebih kecil dari a , jadi mengapa kita memeriksa semua angka tambahan ini? Bukankah kita akan memiliki masalah ketika a dapat dibagi oleh beberapa n- komposit lebih besar dari n ?
Kami tidak akan melakukannya karena jika ada n- komposit lebih besar dari n itu harus dibagi oleh n -prime yang lebih kecil menurut definisi. Jadi, jika itu membagi a maka semakin kecil n -prime.
Jika suatu lebih kecil dari n
[n..a]
akan[]
demikian tidak bisa menyamai[1]
menyebabkan cek gagal.sumber
Jelly , 8 byte
Cobalah online!
sumber
Pip ,
231914 byteMetode terpendek adalah port jawaban Python Mr. Xcoder . Mengambil prime terkecil dan nomor untuk diuji sebagai argumen baris perintah. Cobalah online!
sumber
C, 55 byte
Cobalah online!
53 byte jika beberapa nilai pengembalian yang benar diizinkan:
Cobalah online!
sumber
dc ,
403437 byteSaya akan menyertakan tautan TIO, tetapi TIO tampaknya membawa distribusi yang salah untuk
dc
melihat bagaimana ini berfungsi sebagaimana dimaksud pada sistem saya tetapiQ
perintahnya berfungsi secara keliru pada TIO. Sebaliknya, ini adalah tautan ke tempatbash
pengujian dengan versi berfungsi dengan benardc
:Demo!
sumber
APL (Dyalog) , 24 byte
Cobalah online!
Bagaimana?
⍳⍵
-1
untuka
o←⍺↓
-n
kea
, simpan keo
o|⍨⊂o
- Modulo setiap itemo
dengan setiap item dalamo
0=
- periksa di mana ia sama0
(membagi)+/¨
- jumlahkan jumlah divisi1=
- jika kita hanya punya satu maka jumlahnya hanya dibagi dengan sendirinyao/⍨
- jadi kami menjaga kejadian ini⍵∊
- Apakaha
dalam array residual itu?sumber
JavaScript (Node.js) , 27 byte
Cobalah online!
Port jawaban Python saya, mengambil input dalam sintaks currying:
m(number)(first prime)
sumber
JavaScript ES5, 34 Bytes
sumber
Tambahkan ++ , 20 byte
Cobalah online!
sumber