Primos na fatoração principal


9

Eu vi outro desafio principal chegando no PPCG, e eu me amo alguns números primos. Depois, interpretei mal o texto introdutório e me perguntei o que os cérebros criativos haviam inventado.

Acontece que a pergunta feita foi trivial, mas eu me pergunto se o mesmo se aplica à pergunta que eu (mal) li:


6 pode ser representado por 2 ^ 1 * 3 ^ 1 e 50 pode ser representado por 2 ^ 1 * 5 ^ 2 (onde ^ indica exponência).

Sua tarefa:

Escreva um programa ou função para determinar quantos primos distintos existem nessa representação de um número.

Entrada:

Um número inteiro n tal que 1 <n <10 ^ 12, obtido por qualquer método normal.

Resultado:

O número de primos distintos necessários para representar os fatores primos exclusivos de n.

Casos de teste:

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)

Esta não é uma sequência OEIS.

Pontuação:

Isso é , a menor pontuação em bytes ganha!


Qual é o resultado esperado 64? É 2 (2,3)(como 6 pode ser representado como 2 * 3) ou 1 (2)(ignore o 6)?
Emigna

para 64o resultado esperado é 1 (2). Gosto da ideia de fazê-lo recursivamente, mas não é assim que leio a pergunta original. Eu pensei que 8640era um caso de teste adequado, mas deveria ter sido mais explícito - obrigado.
precisa saber é o seguinte

Você alega que essa não é uma sequência OEIS. Não é A001221, os valores da função ômega (pequena)?
Grey Taylor

A001221 é semelhante, mas começa a divergir nos termos 8 e 9 (aqui 2, A001221 1) devido à inclusão do expoente como principal neste exercício.
pbeentje

Ah entendo. Anote a fatoração primária e veja quantos primos diferentes eu escrevi (independentemente do papel que eles desempenharam). Eu me pergunto o que acontece se você ir um passo além e fatorar o expoente ...
Grey Taylor

Respostas:


5

Mathematica, 39 bytes

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

Experimente online!

graças a Martin Ender (-11 bytes)


Casesacaba por ser mais curto do que Select(-4 bytes): Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&(passa todos os casos de teste em um kernel fresco)
JungHwan Min

Que tal Count[Union@@FactorInteger@#,_?PrimeQ]&? (Não têm verificado todos os casos de teste.)
Martin Ender

@MartinEnder parece que deve funcionar. Também passa em todos os casos de teste.
JungHwan Min 10/10

5

05AB1E , 9 7 bytes

Guardado 2 bytes graças a Kevin Cruijssen

ÓsfìÙpO

Experimente online!

Explicação

Ó        # 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

11
-1 byte usando €pOapós mesclar os principais fatores e expoentes:ÓsfìÙ€pO
Kevin Cruijssen

@KevinCruijssen: Obrigado! Na verdade, salva 2, pois não é necessário.
Emigna 6/05/19

Ah, é claro .. Uau, não sei como eu perdi isso, haha xD
Kevin Cruijssen



4

Gaia , 6 bytes

ḋ_uṗ¦Σ

Experimente online!


  • calcula a fatoração primária, como pares [primo, expoente] .

  • _ nivela a lista.

  • u remove elementos duplicados.

  • ṗ¦mapeia os elementos e retorna 1 se um prime for encontrado, 0 caso contrário.

  • Σ soma a lista.


3

CJam (13 bytes)

{mFe__&:mp1b}

Conjunto de testes online

Isso é bem direto: obtenha primos com multiplicidades, reduza a valores distintos, filtre primos, conte.

Infelizmente, Martin apontou alguns casos que não foram tratados pelo truque levemente interessante em minha resposta original, embora ele também tenha proporcionado uma economia de 1 byte, observando que, uma vez que mp0ou 1pode ser mapeado em vez de filtrado.



1

Na verdade , 7 bytes

w♂i╔♂pΣ

Experimente online!

Explicação:

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 bytes

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

Experimente online!







0

J, 20 bytes

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

Contado à mão lol, então me diga se isso está desativado.

Alguma sugestão de golfe?

Submissão chata: achatar a tabela de fatoração principal e contar números primos.



0

Javascript (ES6), 145 bytes

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}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.