Sebuah Pillai prima adalah bilangan prima yang ada ada beberapa yang positif m sehingga ( m ! + 1 ) ≡ 0 dan p ≢ 1 .
Dengan kata lain, integer adalah prima Pillai jika itu adalah bilangan prima , jika ada yang lain bilangan bulat positif m sehingga faktorial dari m , ditambah 1 habis dibagi p dan jika p - 1 tidak habis dibagi m .
Diberi bilangan bulat positif sebagai input, putuskan apakah itu adalah Pillai prime. Urutan bilangan prima Pillai adalah OEIS A063980 .
Misalnya, adalah Pillai prima karena:
- Ini adalah bilangan prima, hanya memiliki 2 faktor.
- dan m = 18 memenuhi kondisi di atas: 23 | ( 14 ! + 1 ) dan 14 tidak membagi 22 ; 23 | ( 18 ! + 1 ) dan 18 tidak membagi 22 baik.
Uji kasus
Benar:
23 59 83 109 139 593
Falsy:
5 7 8 73 89 263 437
Untuk kasus truthy, masing-masing m s' adalah [(23, [14, 18]), (59, [15, 40, 43]), (83, [13, 36, 69]), (109, [86]), (139, [16]), (593, [274])]
.
Anda dapat mengikuti format keluaran masalah keputusan standar (yaitu, nilai kebenaran / kepalsuan) atau memiliki nilai yang konsisten untuk bilangan prima Pillai dan nilai yang tidak konsisten jika tidak atau sebaliknya. .
Anda dapat bersaing dalam bahasa pemrograman apa pun dan dapat mengambil input dan memberikan output melalui metode standar apa pun , sambil memperhatikan bahwa celah ini dilarang secara default. Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) untuk setiap bahasa menang.
sumber
[(23, 14), (23, 18), (59, 15), (59, 40), (59, 43), (83, 13), (83, 36), (83, 69), (109, 86), (139, 16), (593, 274)]
. Saya juga menambahkan mereka ke tantangan.Jawaban:
Python 2 ,
115111110109 byte-6 byte terima kasih kepada Tn. Xcoder
Cobalah online!
Fungsi terdiri dari dua bagian
~-n%x<1or~f(x)%n>0
yang memverifikasi jikan
tidak memenuhi "kondisi Pillai", dann%x>0
untuk validasi utama.Setelah itu
all
diterapkan untuk kedua item, item pertama akan berisiFalse
/0
jika ada yang valid "Pillai nomor", dan yang kedua akan berisiTrue
/1
jikan
perdana.Ini diteruskan ke
cmp
yang akan kembali-1
dalam skenario ini (adalah prime Pillai yang valid). Kombinasi lainnya[[0, 0], [1, 0], [1, 1]]
akan kembali0
atau1
sumber
Jelly ,
118 byteMengembalikan 0 untuk Pillai prime, 1 sebaliknya.
Cobalah online!
Bagaimana itu bekerja
sumber
Pari / GP , 44 byte
Cobalah online!
sumber
Brachylog , 19 byte
Cobalah online!
Terjemahan pertanyaan yang cukup mudah:
sumber
J ,
3026 byte-4 byte, terima kasih kepada FrownyFrog
Cobalah online!
Penjelasan:
sumber
1~:|
untuk menyimpan 2 byte.(]|1+!@[)
hanya(|1+!)~
~
dan itu masuk akal dengan komentar Anda sebelumnya.Python 2 ,
65645352 byteOutput adalah melalui ada atau tidak adanya kesalahan.
Cobalah online!
sumber
Python 2 ,
109107 byteCobalah online!
Penjelasan
The
l
menemukan faktorial dari jumlah berlalu dalam, sehingga5
sebagai hasil masukan120
.Itu
all(p%i for i in range(2,p-1))
memeriksa untuk melihat apakah nomor perdana, kita mengabaikan 0 dan 1 sebagai kondisi kami yang lain sudah mengesampingkan mereka.Akhirnya, kita gunakan
any(~-p%m>-~l(m)%p==0for m in range(2,p))
untuk beralih melalui semua potensi yang dicari untuk melihat apakah ada yang memenuhi kebutuhan kita.~-p
berartip+1
. Kemudian kita periksa untuk melihat apakah itu lebih besar dari-~l(m)%p
(yang diterjemahkan menjadi(m!-1)%p
, dan kemudian kita bandingkan0
. Pada dasarnya~-p%m
harus lebih besar dari 0 dan-~l(m)%p
harus 0.Sumber
Perbaikan
sumber
seperti yang mungkin Anda lihat di tautan tio tidak semua kasus lulus, itu karena js tidak dapat menangani angka besar, jika ada persyaratan seperti itu coba untuk mengimplementasikannya :)
ada pemeriksaan ganda
F%n>n-2&(F+1)%n<1
untuk mencegah false positive (tapi tidak sebaliknya dengan masalah angka js besar, kita benar-benar perlu(F+1)%n<1
untuk angka yang lebih kecil dimana mengurangi jumlah byte solusi ke 60JavaScript (Node.js) ,
9088867268 byteCobalah online!
sumber
Brachylog , 13 byte
Cobalah online!
Berhasil untuk bilangan prima Pillai, menyediakan m terkecil melalui variabel output, dan gagal untuk hal lain. Karena sebagian besar dari cara ini menghemat byte daripada solusi sundar adalah bahwa ia berulang kali menghitung faktorisasi utama dari beberapa angka yang cukup besar, itu sangat lambat pada input yang lebih besar. (Saya mungkin akan menjalankan kasing-kasing itu pada instalasi Brachylog lokal saya setelah laptop saya tidak menggunakan daya baterai.)
sumber
[Perl], 45 byte
Modul teori angka memiliki predikat sebagai fungsi bawaan (is_pillai sebenarnya mengembalikan 0 atau m terkecil, jadi selesaikan juga A063828). Kode C dan Perl yang mendasarinya tidak golf (tentu saja). Kode C terlihat seperti:
(ganti UV secara umum dengan uint64_t atau yang serupa, dan HALF_WORD memutuskan apakah kami dapat mengoptimalkan mulmod menjadi ops asli yang sederhana).
Kode Perl murni mirip dengan:
sumber
C (gcc) , 64 byte
Cobalah online!
sumber
Bisikan v2 , 230 byte
Cobalah online!
Ini mengembalikan daftar kosong untuk bilangan prima non-Pillai, dan daftar non-kosong sebaliknya.
Bagaimana itu bekerja
Whispers dirancang untuk manipulasi pada bilangan real / kompleks, dengan sedikit perintah array ditambahkan untuk ukuran yang baik, karenanya penggunaan berulang
Each
untuk beralih pada daftar yang dihasilkan.Sedikit latar belakang tentang Whispers:
Bisikan sedikit berbeda di jalur eksekusi untuk sebagian besar bahasa lain. Daripada mengerjakan setiap baris secara linier, hanya bercabang di conditional, Whispers mulai pada baris terakhir dalam file yang dimulai dengan
>
(aturan sedikit lebih rumit dari itu, tapi hanya itu yang perlu kita ketahui untuk saat ini), dan arti angka berbeda, tergantung pada apakah baris dimulai dengan>
atau>>
.Jika garis dimulai dengan
>
, seperti> 1
atau> Input
, ini adalah garis konstan - ia mengembalikan nilai yang sama setiap kali. Di sini, angka mewakili bentuk numeriknya, sehingga baris pertama akan selalu mengembalikan 1 ketika dipanggil.>>
Namun, jika saluran dimulai dengan , nomor diperlakukan sebagai referensi ke saluran lain, semacam panggilan fungsi yang serupa, jika Anda mau. Misalnya, dalam baris>> 1…2
, ini tidak melakukan…
perintah pada bilangan bulat 1 dan 2 , tetapi pada nilai yang dikembalikan dari baris 1 dan 2 . Dalam hal ini, nilai-nilai tersebut adalah bilangan bulat 1 dan bilangan bulat apa pun yang kami berikan sebagai input.Untuk contoh ini, mari kita pertimbangkan input 23 . Perlu diingat bahwa, karena preprocess Whispers ', baris kedua (
> Input
) dikonversi ke> 23
.Perintah pertama kami adalah pada baris 3:
>> 1…2
.…
adalah rentang diad, dalam hal ini dari 1 hingga 23 , menghasilkan {1, 2, ... 22, 23} . Selanjutnya, kita lewati ke baris 9 hingga 12 :Di sini kita memiliki 4
Each
pernyataan konsektif , yang masing-masing diulang dari hasil sebelumnya, pada dasarnya memetakan 4 perintah di atas array pada baris 3 : kisaran. Tiga pernyataan pertama adalah peta sederhana, dengan baris 4 , 5 dan 6 :Tiga perintah ini, di atas bilangan bulat n , menghasilkan (n! +1) ∣x , di mana ! menunjukkan faktorial , ∣ menunjukkan kelaikan dan x adalah input. Akhirnya, baris 12 memiliki struktur peta diad .
Sebuah peta diad struktur mengambil tiga bilangan bulat: target, kiri dan kanan, masing-masing indeks untuk jalur lainnya. Di sini, kita ritsleting kiri dan kanan untuk menghasilkan daftar pasangan, lalu kurangi setiap pasangan dengan perintah diad (target). Di sini, jika inputnya adalah 23 , daftarnya adalah {1, 2, ... 22, 23} dan {0, 0, ... 1, 0} dan perintahnya adalah
yang mengalikan argumen kiri dengan kanan. Ini menghasilkan array bilangan bulat, dengan 0 pada indeks bilangan bulat yang faktorialnya bertambah tidak dapat dibagi oleh input, dan indeks asli di mana mereka berada. Kami akan memanggil array ini A . Selanjutnya, kami menghapus 0 s dari A dengan mengambil perbedaan set antara {0} dan A :
Dengan input contoh kami, ini menghasilkan set {14, 18, 22} . Selanjutnya kita mengambil sisa input yang dibagi dengan masing-masing nilai dalam set, dan memeriksa apakah sisanya tidak sama dengan 1 :
Sekali lagi, kami memiliki daftar 0 atau 1 dan perlu menghapus 0 dan mengganti 1 dengan nilai asli. Di sini kita ulangi kode yang kita lihat di atas, tetapi dengan
>> 18∖13
alih - alih12
. Akhirnya, kami melemparkan set hasil ini ke daftar untuk pemeriksaan akhir. Sayangnya, kode kami juga harus menolak angka gabungan yang mencapai semua kriteria ini, seperti 437 . Jadi kami menambahkan pemeriksaan terakhir kami, mengalikan daftar akhir kami dengan keutamaan input. Karena cara kerja penggandaan Python pada daftar, 0 menggantikannya dengan daftar kosong, dan 1 tidak berpengaruh. Jadi kita menghitung keutamaan input, kalikan dengan daftar muntuk input dan ouput hasil akhir:sumber
APL (NARS), 65 karakter, 130 byte
Di sini 23x artinya 23r1 dan fraksi 23/1, jadi yang lainnya; uji:
sumber
C # (Visual C # Interactive Compiler) , 138 + 22 = 160 byte
TIO belum mengimplementasikan perpustakaan System.Numerics dalam rilisnya Mono, sehingga Anda dapat melihat hasilnya
Coba online!Di sini sebagai gantinya.Penjelasan:
sumber
CJam , 37 byte
Keluaran
11
jika input adalah pillai prime, jika tidak00
,01
atau10
Penjelasan:
Cobalah online!
sumber