Salah satu cara untuk merepresentasikan bilangan asli adalah dengan mengalikan eksponen bilangan prima. Sebagai contoh, 6 dapat diwakili oleh 2 ^ 1 * 3 ^ 1, dan 50 dapat diwakili oleh 2 ^ 1 * 5 ^ 2 (di mana ^ menunjukkan eksponen). Jumlah bilangan prima dalam representasi ini dapat membantu menentukan apakah lebih pendek menggunakan metode representasi ini, dibandingkan dengan metode lain. Tetapi karena saya tidak ingin menghitung ini dengan tangan, saya memerlukan program untuk melakukannya untuk saya. Namun, karena saya harus mengingat program sampai saya pulang, itu harus sesingkat mungkin.
Tugas Anda:
Tulis program atau fungsi untuk menentukan berapa banyak bilangan prima yang berbeda dalam representasi angka ini.
Memasukkan:
Integer n sedemikian sehingga 1 <n <10 ^ 12, diambil dengan metode normal apa pun.
Keluaran:
Jumlah bilangan prima berbeda yang diperlukan untuk mewakili input, sebagaimana diuraikan dalam pendahuluan.
Kasus uji:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
Ini adalah OEIS A001221 .
Mencetak:
Ini adalah kode-golf , skor terendah dalam byte menang!
sumber
Jawaban:
MATL ,
43 byte-1 byte terima kasih kepada Luis Mendo
Cobalah online!
Jawaban asli:
Cobalah online!
Sebuah
Yfun
jawaban.sumber
05AB1E , 2 byte
jawaban lain yang cukup membosankan ...
Program lengkap yang menerima input numerik dan mencetak hasilnya
Cobalah online!
Bagaimana?
sumber
Mathematica, 7 byte
Yup, ada built-in.
Mathematica, 21 byte
Jauh sekali.
sumber
Length@FactorInteger
sama?Length@*FactorInteger
menghasilkan fungsi murni: komposisiLength
danFactorInteger
. Saya dapat mendefinisikanfun=Length@*FactorInteger
dan kemudian memanggilfun[1001]
. Di sisi lain,Length@FactorInteger
akan berartiLength[FactorInteger]
dan mengevaluasi0
.Gaia , 2 byte
Namun jawaban lain yang cukup membosankan ... --- J. Allan
Cobalah online!
ḋ
- Faktorisasi utama sebagai [prima, eksponen] .l
- Panjangnya.sumber
Python 2, 56 byte
sumber
Retina ,
3130 byteMasukan dalam bentuk unary.
Terima kasih kepada @MartinEnder untuk bermain golf 1 byte!
Cobalah online! (termasuk konverter desimal ke unary)
Bagaimana itu bekerja
Karena program terdiri dari satu regex dengan
&
pengubah, Retina hanya menghitung jumlah pertandingan yang tumpang tindih . Input diasumsikan terdiri dari n pengulangan 1 dan tidak ada yang lain.Penampakan negatif
cocok di lokasi antara 1 yang tidak diikuti oleh dua atau lebih 1 (
11+
), diikuti oleh satu atau lebih pengulangan dengan jumlah yang sama 1 (\1+
), diikuti oleh akhir input ($
).Sejumlah komposit ab dengan a, b> 1 dapat ditulis sebagai b pengulangan dari suatu pengulangan dari 1 , sehingga lookahead pertandingan hanya lokasi diikuti oleh p pengulangan dari 1 , di mana p = 1 atau p adalah prima.
Regex
pastikan p> 1 dengan membutuhkan setidaknya dua 1 's (
11+
) dan menyimpan ekor 1 ' s dalam kelompok tangkapan kedua (\2
).Akhirnya, tampilan positif di belakang
memverifikasi bahwa seluruh input terdiri dari kejadian kp ( k ≥ 1 ) dari 1 , memverifikasi bahwa p membagi input.
Dengan demikian, setiap pertandingan sesuai dengan pembagi prime yang unik p .
sumber
Utilitas Bash + GNU, 33
Cobalah online .
Penjelasan
sumber
grep -Po ' \d+'
menyimpan byte lebih daritr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
gagal untuk input 46 .Jelly , 3 byte
jawaban yang sangat membosankan ...
Tautan monadik yang mengambil nomor dan mengembalikan nomor
Cobalah online!
Bagaimana?
sumber
Æv
?Æ
adalah kode alt 0198. 2. Anda dapat mengatur keyboard (saya belum). 3. Halaman kode.Ohm v2 , 2 byte
Cobalah online!
Dua built-in tepat bersebelahan dalam dokumentasi lol.
sumber
Jelly , 2 byte
Namun jawaban lain yang cukup membosankan ... --- J. Allan
Cobalah online!
Built-in.
sumber
Alice , 10 byte
Cobalah online!
Penjelasan
Ini hanya kerangka kerja standar untuk program linear aritmatika-berat yang membutuhkan I / O desimal. Program yang sebenarnya itu sendiri hanyalah:
Yang tidak:
sumber
JavaScript 45 byte
* Untuk @SEJPM meminta penjelasan: apa yang saya lakukan di sini adalah ini mulai dari 2 - n (yang berubah, dan akhirnya akan menjadi faktor utama terbesar) - sekarang jika angka saat ini dibagi ni ingin menghitungnya hanya sekali (bahkan meskipun itu bisa menjadi faktor 2 * 2 * 2 * 3 - 2 dihitung sekali) - jadi "j" muncul di gambar, ketika j tidak ditentukan dalam panggilan fungsi - j akan menerima nilai dari " undefined ", dan ketika n% i == 0 maka saya memanggil fungsi dengan j = 1 pada panggilan berikutnya) - dan kemudian saya hanya menambahkan 1 ketika j sama dengan undefined yaitu! j + Function (n / i, i, ( j = 1 atau hanya 1)). saya tidak mengubah saya dalam hal ini karena mungkin masih dapat dibagi oleh saya lagi (2 * 2 * 3) tetapi kemudian j akan sama dengan 1 dan itu tidak akan dihitung sebagai faktor. harap saya jelaskan dengan cukup baik.
jika prime terakhir sangat besar dari itu akan memiliki panggilan max stack-jika itu masalah saya bisa membuat yang berulang
sumber
CJam ,
75 byteTerima kasih kepada Martin Ender untuk 2 byte off!
Blok anonim (fungsi) yang mengharapkan nomor input pada tumpukan dan menggantinya dengan nomor output.
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Brachylog , 3 byte
Cobalah online!
Penjelasan
sumber
Pyth, 3 byte
Suite uji
Panjang (
l
) dari set ({
) faktor prima (P
) dari input.sumber
Sekam , 3 byte
Cobalah online!
Penjelasan
sumber
Sebenarnya , 2 byte
Namun jawaban lain yang cukup membosankan ... --- J. Allan
Cobalah online!
Karakter pertama dapat diganti dengan
w
.sumber
Pyke , 3 byte
Coba di sini!
sumber
Python 3 ,
6867 byte1 byte dihapus berkat @ Mr.Xcoder
Ini kali untuk kasus uji terbesar. Cobalah online!
sumber
Angka R +,
3014 byte16 byte dihapus berkat @Giuseppe
Juga, ini adalah Coba online !! tautan per @Giuseppe.
sumber
f=function(x)
dan(x)
sebagaimananumbers::omega
adanya fungsi sudah. Namun, karenanumbers
tidak standar untuk R, Anda harus menjawab "R + angka". Anda juga harus menyertakan tautan TIO . Tetap +1, sangat bagus.MATL
solusi Anda sangat bagus (+1 kemarin).numbers::
. Kalau tidak, bagi saya itu sama dengan menggunakanimport
bahasa lain.Cembung , 3 byte
Cobalah online!
sumber
Pari / GP , 5 byte
Saya tidak tahu mengapa ini disebut nu di Mathematica tetapi omega di Pari / GP.
Cobalah online!
sumber
Haskell , 58 byte
-4 byte terima kasih kepada @Laikoni
Cobalah online!
Penjelasan
Pada dasarnya menghasilkan semua bilangan prima paling besar
n
dan memfilternya untuk menjadi faktor n dan kemudian mengambil hasil yang panjang.sumber
sum[1|x<- ... ]
bukanlength
.Japt,
54 byteCobalah
Dapatkan pembagi (
â
) dan hitung (è
) bilangan prima (j
).sumber
ARBLE , 28 byte
Cobalah online!
Ini adalah solusi yang sangat literal
sumber
Dyalog APL , 17 byte
Cobalah online!
sumber
Python 2 ,
6355 byteJawaban yang jauh lebih menarik ...
-8 byte berkat Jonathan Frech (menggunakan argumen dengan default untuk pasca-penyesuaian hasil bilangan prima dari
0
ke1
- jauh lebih baik daripada lambda pembungkus !!)Fungsi rekursif mengambil bilangan bulat positif
n
,, dan mengembalikan bilangan bulat positif, hitung.Cobalah online! Sangat tidak efisien, jangan repot-repot dengan test case lainnya.
sumber
J, 12 byte
q:
adalah fungsi eksponen utama J, memberikan argumen__
menghasilkan matriks yang baris pertama adalah semua faktor prima nol dan baris ke-2 adalah eksponen mereka.Kami mengambil bentuk
$
matriks itu - baris demi kolom - jumlah kolom adalah jawaban yang kami cari.{:
memberi kita item terakhir dari daftar dua item ini (baris num, kolom num), dan karenanya jawabannya.Cobalah online!
sumber
Java (OpenJDK 9) , 67 byte
Cobalah online!
sumber
Javascript ES6, 56 karakter
Uji:
sumber