Primi nella scomposizione in fattori primi


9

Ho visto un'altra sfida principale arrivare in PPCG e mi piacciono alcuni numeri primi. Poi ho letto male il testo introduttivo, e mi chiedevo che cosa avesse escogitato il cervello creativo qui.

Si scopre che la domanda posta era banale, ma mi chiedo se lo stesso vale per la domanda che (mis) ho letto:


6 può essere rappresentato da 2 ^ 1 * 3 ^ 1 e 50 può essere rappresentato da 2 ^ 1 * 5 ^ 2 (dove ^ indica esponenzione).

Il tuo compito:

Scrivi un programma o una funzione per determinare quanti numeri primi distinti ci sono in questa rappresentazione di un numero.

Ingresso:

Un numero intero n tale che 1 <n <10 ^ 12, preso con qualsiasi metodo normale.

Produzione:

Il numero di numeri primi distinti richiesti per rappresentare i fattori primi unici di n.

Casi test:

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)

Questa non è una sequenza OEIS.

punteggio:

Questo è , il punteggio più basso in byte vince!


Qual è il risultato atteso per 64? È 2 (2,3)(come 6 può essere rappresentato come 2 * 3) o 1 (2)(ignora il 6)?
Emigna,

per 64il risultato atteso è 1 (2). Mi piace l'idea di farlo in modo ricorsivo, ma non è così che ho letto la domanda originale. Pensavo 8640fosse un caso di prova adatto, ma avrebbe dovuto essere più esplicito, grazie.
pbeentje,

Affermate che questa non è una sequenza OEIS. Non è A001221, i valori della (piccola) funzione omega?
Gray Taylor,

A001221 è simile, ma inizia a divergere ai termini 8 e 9 (qui 2, A001221 1) a causa dell'inclusione dell'esponente come primo in questo esercizio.
pbeentje,

Ah, capisco. Annota la scomposizione in fattori primi, quindi vedi quanti numeri primi ho scritto (indipendentemente dal ruolo che hanno svolto). Mi chiedo cosa succede se fai un ulteriore passo avanti e fai un fattore esponente ...
Gray Taylor,

Risposte:


5

Mathematica, 39 byte

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

Provalo online!

grazie a Martin Ender (-11 byte)


Casesrisulta essere più breve di Select(-4 byte): Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&(passa tutti i casi di test su un kernel nuovo)
JungHwan Min

Che ne dici Count[Union@@FactorInteger@#,_?PrimeQ]&? (Non ho controllato tutti i casi di test.)
Martin Ender,

@MartinEnder sembra che dovrebbe funzionare. Passa anche tutti i casi di test.
JungHwan Min

5

05AB1E , 9 7 byte

Salvato 2 byte grazie a Kevin Cruijssen

ÓsfìÙpO

Provalo online!

Spiegazione

Ó        # 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 usando €pOdopo aver unito i fattori primi e gli esponenti:ÓsfìÙ€pO
Kevin Cruijssen

@KevinCruijssen: grazie! In realtà salva 2 poiché non è necessario.
Emigna,

Ah, certo .. Wow, non sono sicuro di come mi sia perso, haha ​​xD
Kevin Cruijssen,



4

Gaia , 6 byte

ḋ_uṗ¦Σ

Provalo online!


  • calcola la scomposizione in fattori primi, come coppie [prime, esponenti] .

  • _ appiattisce l'elenco.

  • u rimuove gli elementi duplicati.

  • ṗ¦mappa attraverso gli elementi e restituisce 1 se viene trovato un numero primo, 0 altrimenti.

  • Σ somma l'elenco.


3

CJam (13 byte)

{mFe__&:mp1b}

Suite di test online

Questo è piuttosto semplice: ottenere numeri primi con molteplicità, ridurre a valori distinti, filtrare i numeri primi, contare.

Purtroppo Martin ha sottolineato alcuni casi che non sono stati gestiti da trucco vagamente interessante nella mia risposta iniziale, anche se ha fatto anche fornire un risparmio di 1 byte osservando che poiché mp0o 1che possono essere mappati e non filtrato.



1

In realtà , 7 byte

w♂i╔♂pΣ

Provalo online!

Spiegazione:

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)))

Provalo online!







0

J, 20 byte

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

Contato a mano lol, quindi dimmi se è spento.

Qualche suggerimento sul golf?

Presentazione noiosa: appiattire la tabella di fattorizzazione primi e contare i numeri primi.



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}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.