Angka adalah perdana Chen jika memenuhi dua syarat:
- Itu prima itu sendiri
- Sendiri ditambah dua adalah prima atau semi-prima.
Perdana adalah bilangan di mana ia memiliki tepat dua pembagi dan pembagi itu terdiri dari dirinya sendiri dan satu pembagi.
Semi-prime adalah angka yang merupakan produk dari dua bilangan prima. (Perhatikan bahwa 12 = 2 * 2 * 3 bukan semi-prime, tetapi 25 = 5 * 5).
Tugas Anda adalah menentukan apakah suatu bilangan merupakan prima Chen. Anda harus menampilkan nilai kebenaran untuk ya dan nilai palsu untuk tidak.
Input akan berupa bilangan bulat yang lebih besar dari atau sama dengan satu. Ini juga dapat diambil sebagai string, array karakter, atau array atau digit.
Contoh:
101 -> truthy
223 -> falsy
233 -> truthy
1 -> falsy
Ini adalah OEIS A109611 .
Ini, sebagian, terinspirasi oleh Apakah aku perdana Sophie Germain? yang, sayangnya, ditutup sebagai duplikat, jadi saya memposting tantangan yang agak terkait yang bukan duplikat.
True
untuk kebenaran dan2
atauFalse
untuk kepalsuan (nilai-nilai kepalsuan tidak konsisten)?2 * 2 * 2 * 3 * 3
semi-prime? Bagaimana dengan5 * 5
?5*5
adalah semi-prime,2*2*2*3*3
bukan. Saya mengatakan tepat dua.2*2*2*3*3
memiliki tepat dua faktor utama, yaitu2
dan3
, dan5*5
memiliki satu faktor utama, yaitu5
.) Mungkin Anda dapat mengeditnya menjadi pertanyaan?Jawaban:
Brachylog , 7 byte
Cobalah online!
Penjelasan
sumber
05AB1E , 8 byte
Cobalah online!
Penjelasan
sumber
ArnoldC , 1339 byte
Cobalah online!
(Ini adalah posting pertama saya di codegolf.SE, tolong beri tahu saya jika ini tidak diformat dengan benar. Saya menyadari jumlah byte ini tidak kompetitif, ini hanya untuk bersenang-senang.)
sumber
Jelly , 10 byte
Cobalah online!
sumber
Pyth, 10 byte
Cobalah online!
Bagaimana?
sumber
Python dengan sympy ,
6956 byte-13 byte berkat alephalpha (dengan memutakhirkan ke sympy 1.1 dan gunakan
primeomega(n+2)
untuk menggantisum(factorint(n+2).values())
)... mengambil alih dari pengajuan yang dihapus Gryphon.
Fungsi yang tidak disebutkan namanya kembali
True
untuk Chen primes danFalse
sebaliknya.Menghitung faktor
n+2
dengan menjumlahkan banyaknya faktor prima.Catatan yang
3
dikalikan denganisprime(n)
sebelum<
perbandingan dibuat, jadi untuk non-primen
tes kode jikan+2
memiliki kurang dari0
faktor (selalu menghasilkanFalse
), sedangkan untuk primen
memeriksa apakahn+2
prime atau semi-prime.sumber
3*isprime(n)
trick adalah apa yang saya cari dalam membersihkan pernyataan kondisional.Pari / GP , 29 byte
The
3*isprime(n)
trick dicuri dari jawaban Jonathan Allan 's .Cobalah online!
sumber
Java 8,
858483 byte-1 byte terima kasih kepada @ OlivierGrégoire dengan menggunakan pendekatan berulang bukan rekursif.
Penjelasan:
Coba di sini.
sumber
n->{int N=n+2,f=0,F=0,d=1;for(;d++<n;f+=n%d<1?1:0)F+=N%d<1?1:0;return n>1&f<2&F<3;}
.Mathematica, 28 byte
sumber
JavaScript (ES6),
6361 byteMenentukan fungsi
f
yang digunakann
sebagai argumen dan mengembalikan hasilnya. Saya sangat senang dengang
hasilnya; itu menghitung jumlah faktor prima dalam suatu angka.2 byte menghemat berkat
&
trik Kevin Cruijssen .Tidak disatukan
sumber
&&
ke&
? Karena 0/1 adalah nilai kebenaran / falsey di JS juga?|
dan&
tidak mengalami korsleting, yang mungkin menghemat lebih banyak byteg
.Japt ,
2220191312 byteMenguji
sumber
PHP, 64 byte
mencetak
0
untuk truey, bilangan bulat lainnya untuk falsy. Jalankan sebagai pipa dengan-nR
atau coba online .kerusakan
nilai falsy konsisten, 65 byte:
cetakan
1
untuk kebenaran dan0
kepalsuan.sumber
Python 3 dengan SymPy,
7371 byteCobalah online!
Ini adalah versi yang lebih golf dari jawaban yang diposting di sini sebelumnya, tetapi sepertinya sudah dihapus.
Terima kasih kepada @JonathanAllan karena telah menghemat 2 byte!
sumber
f=
, membuat fungsi tanpa nama tidak masalah untuk kode-golf.PHP , 87 byte
Cobalah online!
PHP , 87 byte
Cobalah online!
sumber
APL NARS, 23 karakter
Di sini π⍵ mengembalikan array faktor ⍵ berbeda dari 1; beberapa tes:
sumber
Regex (ECMAScript), 31 byte
Cobalah online! (menunjukkan semua bilangan prima Chen ≤ 1000)
Diberikan string n
x
s regex ini akan cocok jika dan hanya jika n adalah prime Chen.Ini menegaskan bahwa n lebih besar dari 2 dan bahwa string bukan dari bentuk.
((xx+)(\2(xx))*)(\1\4)+
Regex ini memiliki dua makna, tergantung pada berapa kali
(\2(xx))
diulang.Ketika diulang 0 kali, regex dapat disederhanakan
(xx+)\1+
, yang cocok dengan angka komposit.Ketika diulang beberapa kali positif, regex sama dengan
((xx+)(\2xx)+)(\1xx)+
Regex itu membutuhkan penjelasan, namun, saya akan memberikan sedikit wawasan.
Jika Anda membaca aljabar, Anda menemukan
((xx+)(\2xx)+)(\1xx)+
angka yang cocok dengan bentuk dia*b*c-2
manaa≥4,b≥2,c≥2
.Jadi itu akan cocok (hampir) setiap kali n +2 memiliki lebih dari 2 faktor prima. (Yaitu bukan prime atau semi-prime)
Perhatikan bahwa itu tidak cocok dengan 6, 16 atau 25, tetapi ini tidak masalah, karena semuanya komposit.
Jadi
(?!((xx+)(\2(xx))*)(\1\4)+$)
akan cocok selama n tidak komposit, dan n +2 adalah prima atau semi-prima.Sayangnya ini termasuk 1 (dan 0), jadi kami kemudian memeriksa bahwa n setidaknya 2 dengan
xx
Beberapa "31-byters" yang berbeda adalah:
sumber
Ruby ,
4941 byteCobalah online!
Terima kasih H.PWiz untuk -8 byte
Bagaimana?
Hal pertama, dapatkan string
'l'
berulang n + 2 kali. Kemudian gunakan regex untuk memeriksa apakah:(.?)(..)
((..+)\1)(..)
((..+)\2)\1+
Bagian 2 regex menghasilkan case keempat yang tidak masuk akal dan aman untuk diabaikan
(.?)\2+
:, yang memutuskan untuk mengosongkan string atau karakter tunggal karena\2
kosong.sumber
|
bersama-sama lebih dekat:^((..+)\2+)(\1+|..)$
. Juga, kebetulan yang rapi bahwa Anda mencoba masalah ini dengan regex pada waktu yang sama dengan saya :).
bukan.?
karena input selalu setidaknya 1Julia, 59 byte
sumber
Pyt , 11 byte
3 * isprime (x) dicuri dari jawaban Jonathan Allan
sumber
Haskell , 163 byte
Cobalah online!
sumber