Asal çarpanlara ayırmada temeller


9

PPCG'de bir başka asal zorluğun geldiğini gördüm ve bana bazı asalları seviyorum. Sonra tanıtım metnini yanlış okudum ve buradaki yaratıcı beyinlerin ne bulduğunu merak ettim.

Ortaya çıkan sorunun önemsiz olduğu ortaya çıktı, ama aynı soru okuduğum soru için de doğru mu merak ediyorum:


6, 2 ^ 1 * 3 ^ 1 ile temsil edilebilir ve 50, 2 ^ 1 * 5 ^ 2 ile temsil edilebilir (burada ^, üstel değeri gösterir).

Senin görevin:

Bir sayının bu gösteriminde kaç farklı asal sayı olduğunu belirlemek için bir program veya işlev yazın .

Giriş:

Herhangi bir normal yöntemle alınan 1 <n <10 ^ 12 olacak şekilde n tamsayısı.

Çıktı:

N'nin benzersiz asal faktörlerini temsil etmek için gerekli olan ayrı primerlerin sayısı .

Test senaryoları:

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)

Bu bir OEIS dizisi değildir.

puanlama:

Bu , bayt en düşük puan kazanır!


Beklenen sonuç ne için 64? Bu mi 2 (2,3)(6 2 x 3 olarak temsil edilebilir) ya da 1 (2)(6 yok say)?
Emigna

için 64beklenen sonuç 1 (2) 'dir. Bunu tekrar tekrar yapma fikrini seviyorum, ancak orijinal soruyu okuduğum yol bu değil. 8640Uygun bir test vakası olduğunu düşündüm , ancak daha açık olmalıydı - teşekkürler.
pbeentje

Bunun bir OEIS dizisi olmadığını iddia ediyorsunuz. A001221 değil, (küçük) omega fonksiyonunun değerleri değil mi?
Gray Taylor

A001221 benzerdir, ancak üssün bu egzersize ana olarak dahil edilmesinden dolayı 8 ve 9'da (burada 2, A001221 1) ayrılmaya başlar.
pbeentje

Ah, anlıyorum. Asal çarpanlara ayırmayı yazın, ardından kaç farklı asal yazdığımı görün (oynadıkları role bakılmaksızın). Bir adım daha ileri gidip üssü çarpanlarına ayırırsanız ne olacağını merak ediyorum ...
Gray Taylor

Yanıtlar:


5

Mathematica, 39 bayt

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

Çevrimiçi deneyin!

Martin Ender sayesinde (-11 bayt)


CasesSelect(-4 bayt) değerinden daha kısa çıkıyor : Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&(tüm
çekleri

Nasıl Count[Union@@FactorInteger@#,_?PrimeQ]&? (Tüm test
Martin Ender

@MartinEnder çalışması gerektiği gibi görünüyor. Tüm test senaryolarını da geçer.
JungHwan Min

5

05AB1E , 9 7 bayt

Kevin Cruijssen sayesinde 2 bayt kurtardı

ÓsfìÙpO

Çevrimiçi deneyin!

açıklama

Ó        # 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
€pOAna faktörleri ve üsleri birleştirdikten sonra kullanarak -1 bayt :ÓsfìÙ€pO
Kevin Cruijssen

@KevinCruijssen: Teşekkürler! Aslında gerekmediği için 2 kaydeder .
Emigna

Ah, elbette .. Vay be, bunu nasıl özlediğimden emin değilim, haha ​​xD
Kevin Cruijssen



4

Gaia , 6 bayt

ḋ_uṗ¦Σ

Çevrimiçi deneyin!


  • asal çarpanlarına ayırma işlemini [asal, üs] çiftleri olarak hesaplar .

  • _ listeyi düzleştirir.

  • u yinelenen öğeleri kaldırır.

  • ṗ¦elementler ve döner aracılığıyla haritalar 1 asal bulunursa, 0 aksi.

  • Σ listeyi toplar.


3

CJam (13 bayt)

{mFe__&:mp1b}

Çevrimiçi test takımı

Bu oldukça basittir: çokluklu primerler alın, farklı değerlere azaltın, primerleri filtreleyin, sayın.

Ne yazık ki Martin o da beri bu gözlemleyerek bir 1 baytlık tasarrufu sağlayan rağmen, benim orijinal cevap hafif ilginç hile ile ele alınmamış bazı vakaları işaret mpverir 0ya 1da eşleştirilmiş yerine filtre edilebilir.



1

Aslında 7 bayt

w♂i╔♂pΣ

Çevrimiçi deneyin!

Açıklama:

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







0

J, 20 bayt

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

El lol sayılan, bu yüzden bu kapalı olduğunu söyle.

Golf önerileriniz var mı?

Sıkıcı sunum: asal çarpanlara ayırma tablosunu düzleştirin ve asal sayıları sayın.



0

Javascript (ES6), 145 bayt

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}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.