Bangga dalam factorisation utama


9

Saya melihat tantangan utama lain yang muncul di PPCG, dan saya sangat menyukai saya bilangan prima. Kemudian saya salah membaca teks pengantar, dan bertanya-tanya apa otak kreatif di sini telah muncul.

Ternyata pertanyaan yang diajukan sepele, tetapi saya bertanya-tanya apakah hal yang sama berlaku untuk pertanyaan yang saya baca (salah):


6 dapat diwakili oleh 2 ^ 1 * 3 ^ 1, dan 50 dapat diwakili oleh 2 ^ 1 * 5 ^ 2 (di mana ^ menunjukkan eksponensial).

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 faktor prima unik n.

Kasus uji:

Input      Factorisation      Unique primes in factorisation representation
24         2^3*3^1            2 (2, 3)
126        2^1*3^2*7^1        3 (2, 3, 7)
8          2^3                2 (2, 3)
64         2^6                1 (2) (6 doesn't get factorised further)
72         2^3*3^2            2 (2, 3)
8640       2^6*3^3*5^1        3 (2, 3, 5)
317011968  2^11*3^5*7^2*13^1  6 (2, 3, 5, 7, 11, 13)
27         3^3                1 (3)

Ini bukan urutan OEIS.

Mencetak:

Ini adalah , skor terendah dalam byte menang!


Untuk apa hasil yang diharapkan 64? Apakah 2 (2,3)(karena 6 dapat direpresentasikan sebagai 2 * 3) atau 1 (2)(abaikan 6)?
Emigna

untuk 64hasil yang diharapkan adalah 1 (2). Saya suka ide melakukannya secara rekursif, tapi bukan itu cara saya membaca pertanyaan aslinya. Saya pikir 8640itu kasus uji yang cocok, tetapi seharusnya lebih eksplisit - terima kasih.
pbeentje

Anda mengklaim ini bukan urutan OEIS. Bukankah A001221, nilai-nilai fungsi omega (kecil)?
Gray Taylor

A001221 serupa, tetapi mulai menyimpang pada istilah 8 dan 9 (di sini 2, A001221 1) karena dimasukkannya eksponen sebagai prima dalam latihan ini.
pbeentje

Ah, begitu. Tuliskan factorisation utama, lalu lihat berapa banyak bilangan prima yang saya tulis (terlepas dari peran yang mereka mainkan). Saya ingin tahu apa yang terjadi jika Anda melangkah lebih jauh dan memfaktorkan eksponen ...
Gray Taylor

Jawaban:


5

Mathematica, 39 byte

Count[Union@@FactorInteger@#,_?PrimeQ]&

Cobalah online!

terima kasih kepada Martin Ender (-11 bytes)


Casesternyata lebih pendek dari Select(-4 byte): Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&(melewati semua test case pada kernel baru)
JungHwan Min

Bagaimana dengan Count[Union@@FactorInteger@#,_?PrimeQ]&? (Belum memeriksa semua kasus uji.)
Martin Ender

@ MartinEnder sepertinya harusnya berfungsi. Lewati semua test case juga.
JungHwan Min

5

05AB1E , 9 7 byte

Disimpan 2 byte berkat Kevin Cruijssen

ÓsfìÙpO

Cobalah online!

Penjelasan

Ó        # push the prime factor exponents of the input
 sfì     # prepend the prime factors of the input
    Ù    # remove duplicates
     p   # check each if it is prime
      O  # sum

1
-1 byte dengan menggunakan €pOsetelah menggabungkan faktor prima dan eksponen:ÓsfìÙ€pO
Kevin Cruijssen

@KevinCruijssen: Terima kasih! Sebenarnya menghemat 2 karena tidak diperlukan.
Emigna

Ah, tentu saja .. Wow, tidak yakin bagaimana saya melewatkan itu, haha ​​xD
Kevin Cruijssen


4

Jelly ,  9  7 byte

ÆFFQÆPS

Cobalah online! atau Lihat Test suite.

Bagaimana?

ÆFFQÆPS ~ Program lengkap.

ÆF ~ Faktorisasi utama sebagai pasangan [prima, eksponen].
  F ~ Ratakan.
   Q ~ Deduplicate.
    ÆP ~ Untuk masing-masing, periksa apakah itu prima. 1 jika Benar, 0 jika Salah.
      S ~ Jumlah.

4

Gaia , 6 byte

ḋ_uṗ¦Σ

Cobalah online!


  • menghitung faktorisasi utama, sebagai pasangan [prima, eksponen] .

  • _ ratakan daftar.

  • u menghapus elemen duplikat.

  • ṗ¦memetakan melalui elemen dan mengembalikan 1 jika bilangan prima ditemukan, 0 sebaliknya.

  • Σ meringkas daftar.


3

CJam (13 byte)

{mFe__&:mp1b}

Test suite online

Ini cukup mudah: dapatkan bilangan prima dengan banyak, kurangi ke nilai yang berbeda, filter bilangan prima, hitung.

Sayangnya Martin menunjukkan beberapa kasus yang tidak ditangani oleh trik yang agak menarik dalam jawaban asli saya, meskipun ia juga memberikan penghematan 1-byte dengan mengamati bahwa sejak mpmemberi 0atau 1dapat dipetakan daripada disaring.



1

Sebenarnya , 7 byte

w♂i╔♂pΣ

Cobalah online!

Penjelasan:

w♂i╔♂pΣ
w        factor into [prime, exponent] pairs
 ♂i      flatten to 1D list
   ╔     unique elements
    ♂p   for each element: 1 if prime else 0
      Σ  sum

1

Python 2 , 142 135 119 byte

f=lambda n,d=2:n-1and(n%d and f(n,d+1)or[d]+f(n/d))or[]
p=f(input())
print sum(f(n)==[n]for n in set(p+map(p.count,p)))

Cobalah online!







0

J, 20 byte

3 :'+/1 p:~.,__ q:y'

Dihitung dengan tangan lol, jadi beri tahu saya jika ini tidak aktif.

Ada saran bermain golf?

Pengajuan membosankan: ratakan tabel faktorisasi utama dan hitung bilangan prima.



0

Javascript (ES6), 145 byte

n=>{for(a=[b=l=0],q=n,d=2;q>=2;)q%d?(b&&(a.push(0),l++),d++,b=0):(q/=d,a[l]++,b=1);for(i in a){for(d=1,e=a[i];e%d;d++);e-d||n%e&&l++};return l+1}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.