Tetapkan bahwa bilangan asli p adalah prima +1 dari bilangan alami n jika p adalah bilangan prima dan representasi biner standar (yaitu, tanpa nol nol di depan) dari p dapat diperoleh dengan menambahkan (yaitu, mengawali, menambahkan atau menyisipkan) 1 tunggal untuk representasi biner standar n .
Sebagai contoh, representasi biner dari 17 adalah 10001 2 . Bilangan alami berbeda yang dapat dibentuk dengan menambahkan 1 hingga 10001 2 adalah 110001 2 atau 49 , 101001 2 atau 41 , 100101 2 atau 37 , dan 100011 2 atau 35 .
Di antaranya, 41 dan 37 adalah bilangan prima, jadi 17 memiliki dua bilangan prima +1 .
Tugas
Tulis program atau fungsi yang menerima bilangan bulat positif n sebagai input dan mencetak atau mengembalikan jumlah bilangan prima +1 yang unik dari n .
Input dan output harus berupa bilangan bulat, atau representasi string desimal atau unary.
Aturan standar kode-golf berlaku.
Uji kasus
Input: 4
Output: 0
Input: 1
Output: 1
Input: 17
Output: 2
Input: 33
Output: 3
Input: 553
Output: 4
Input: 3273
Output: 5
Input: 4145
Output: 6
Input: 4109
Output: 7
Input: 196869
Output: 8
Jawaban:
Pyth, 20 byte
Test Suite
sumber
JavaScript ES6, 141 byte
143147160Menghemat 13 byte, terima kasih kepada @Nouak
Metode yang mirip dengan jawaban TeaScript saya, menggunakan RegExp (Anda mendengar saya benar) untuk memeriksa bilangan prima.
Tidak disatukan
sumber
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
bukannya!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Minkolang 0.11 ,
5452 bytePenjelasan
sumber
TeaScript , 22 byte
TeaScript mulai terlihat seperti APL ... Karakter khusus dikonversi menjadi lebih lama, urutan yang sering diulang
Penerjemah online pastikan untuk memeriksa "Input adalah angka."
Penjelasan && Tidak Disatukan
sumber
Julia,
5552 bytek=2.^(0:endof(bin(n)))
menghasilkan array yang berisi kekuatan 2 dari 1 ke daya tertinggi kurang darin
.2n+k-n%k
kemudian menggunakan operasi array untuk menentukan semua kemungkinan "angka +1".∪
(setara denganunion
, yang melakukan hal yang sama sepertiunique
dalam situasi ini) menghilangkan nilai repeat. Kemudiansum(isprime,)
menghitung jumlah bilangan prima dalam daftar.sumber
CJam, 26 byte
Bukan pemenang, tetapi itu mengalahkan jawaban CJam yang ada dengan cukup solid dan ini adalah pertama kalinya saya menggunakan perintah 0.6.5
e\
.Uji di sini.
Penjelasan
Satu hal yang perlu diperhatikan adalah bahwa kita menukar bit pada
0
dan1
sebelum membuat salinan pertama, jadi kita kehilangan array asli dengan yang1
diawali dengan bagian depan. Namun, input selalu positif, sehingga digit terdepan akan selalu menjadi satu. Itu berarti setelah memprioritaskan yang lain, daftar digit akan selalu dimulai dengan[1 1 ...]
sehingga swap pertama akan menjadi no-op dalam hal apa pun.sumber
Mathematica, 87 byte
sumber
Julia,
11010810487 byteIni menciptakan fungsi tanpa nama yang menerima dan integer dan mengembalikan integer. Untuk menyebutnya, berikan nama, mis
f=n->...
.Tidak Disatukan:
Disimpan 17 byte berkat Glen O!
sumber
bin
harus dimulai dengan 1, jadi Anda tidak perlu menangani secara terpisah"1"b
. Dan ketikai=length(b)
, Anda akan memilikib[i+1:end]
setara dengan""
, jadi tidak perlu entri itu (hanya perlu menanganib=bin(n)
di beberapa titik) Dansum
akan melakukan hal yang sama dengancount
dua byte lebih sedikit.b
, mungkin lebih baik Anda lakukan dengan sedikit trik -b=bin(n)[s=1:end]
dan kemudianfor i=s
untuk pemahaman.bin
harus 1, dan Anda akan mendapatkan ini:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
- ini membawa hitungan ke 90 byte.unique
denganunion
- itu akan melakukan hal yang sama, jika hanya diberi satu array sebagai input. Atau lebih baik,∪
daripadaunion
.CJam, 58 byte
Ini memakan waktu sehari, dan ini adalah pengulangan keempat saya.
sumber
Japt
-x
,1411 byteCobalah atau jalankan semua test case
sumber
PHP, 145 byte
Saya telah menambahkan baris baru untuk keterbacaan:
sumber
CJam, 34 byte
Cobalah online
Versi pertama, akan diperbarui jika saya menemukan sesuatu yang lebih baik.
sumber
APL, 55
2 byte lebih pendek Dyalog versi spesifik:
sumber
Matlab (120)
sumber
Brachylog , 17 byte
Cobalah online!
Input melalui variabel input dan output melalui variabel output.
sumber
Jelly , 13 byte
Cobalah online!
sumber
Python 2 , 103 byte
Cobalah online!
sumber