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 é código-golfe , a menor pontuação em bytes ganha!
64
? É2 (2,3)
(como 6 pode ser representado como 2 * 3) ou1 (2)
(ignore o 6)?64
o resultado esperado é 1 (2). Gosto da ideia de fazê-lo recursivamente, mas não é assim que leio a pergunta original. Eu pensei que8640
era um caso de teste adequado, mas deveria ter sido mais explícito - obrigado.Respostas:
Mathematica, 39 bytes
Experimente online!
graças a Martin Ender (-11 bytes)
fonte
Cases
acaba por ser mais curto do queSelect
(-4 bytes):Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&
(passa todos os casos de teste em um kernel fresco)Count[Union@@FactorInteger@#,_?PrimeQ]&
? (Não têm verificado todos os casos de teste.)05AB1E ,
97 bytesGuardado 2 bytes graças a Kevin Cruijssen
Experimente online!
Explicação
fonte
€pO
após mesclar os principais fatores e expoentes:ÓsfìÙ€pO
€
não é necessário.MATL , 8 bytes
Experimente online!
fonte
Geléia ,
97 bytesExperimente online! ou Confira o conjunto de teste.
Como?
fonte
Gaia , 6 bytes
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.fonte
CJam (13 bytes)
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
mp
dá0
ou1
pode ser mapeado em vez de filtrado.fonte
Ohm v2 ,
65 bytes-1 byte graças a @ Mr.Xcoder
Experimente online!
fonte
ä{UpΣ
Na verdade , 7 bytes
Experimente online!
Explicação:
fonte
Python 2 ,
142135119 bytesExperimente online!
fonte
Casca ,
1110 bytesExperimente online!
EDIT: economizou 1 byte graças ao Zgarb .
fonte
#ṗuS+omLgp
salva um byte.Braquilog , 7 bytes
Experimente online!
Uma divertida versão de 9 bytes:
ḋọ{∋∋ṗ}ᶜ¹
fonte
Ruby
-rprime
, 66 bytesExperimente online!
fonte
Pitão , 15 bytes
Experimente aqui!
fonte
Números R +, 92 bytes
Experimente online!
fonte
J, 20 bytes
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.
fonte
Pari / GP , 47 bytes
Experimente online!
fonte
Javascript (ES6), 145 bytes
fonte