Uma maneira de representar um número natural é multiplicando expoentes de números primos. Por exemplo, 6 podem ser representados por 2 ^ 1 * 3 ^ 1 e 50 podem ser representados por 2 ^ 1 * 5 ^ 2 (onde ^ indica exponência). O número de primos nessa representação pode ajudar a determinar se é mais curto usar esse método de representação, em comparação com outros métodos. Mas como não quero calculá-las manualmente, preciso de um programa para fazer isso por mim. No entanto, como terei que me lembrar do programa até chegar em casa, ele deve ser o mais curto possível.
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 a entrada, conforme descrito na introdução.
Casos de teste:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
Este é o OEIS A001221 .
Pontuação:
Isso é código-golfe , a menor pontuação em bytes ganha!
fonte
Respostas:
MATL ,
43 bytes-1 byte graças a Luis Mendo
Experimente online!
Resposta original:
Experimente online!
Uma
Yfun
resposta ver .fonte
05AB1E , 2 bytes
outra resposta muito chata ...
Um programa completo que aceita uma entrada numérica e imprime o resultado
Experimente online!
Quão?
fonte
Mathematica, 7 bytes
Sim, há um embutido.
Mathematica, 21 bytes
O longo caminho.
fonte
Length@FactorInteger
o mesmo?Length@*FactorInteger
produz uma função pura: a composição deLength
eFactorInteger
. Eu posso definirfun=Length@*FactorInteger
e depois ligarfun[1001]
. Por outro lado,Length@FactorInteger
significariaLength[FactorInteger]
e avaliaria0
.Gaia , 2 bytes
Ainda outra resposta bastante chata ... --- J. Allan
Experimente online!
ḋ
- Fatoração primária como pares [primos, expoentes] .l
- Comprimento.fonte
Python 2, 56 bytes
fonte
Retina ,
3130 bytesA entrada está unária.
Obrigado a @MartinEnder pelo golfe de 1 byte!
Experimente online! (inclui conversor decimal para unário)
Como funciona
Como o programa consiste em uma única regex com o
&
modificador, o Retina simplesmente conta a quantidade de correspondências sobrepostas . Supõe-se que a entrada consiste em n repetições de 1 e nada mais.O lookahead negativo
partidas em locais entre 1 's que são não seguidos por duas ou mais 1 ' s (
11+
), seguido por uma ou mais repetições da mesma quantidade de 1 's (\1+
), seguindo-se a extremidade de entrada ($
).Qualquer número composto ab com a, b> 1 pode ser escrito como b repetições de uma repetição de 1 ; portanto, o lookahead corresponde apenas a locais seguidos de p repetições de 1 , onde p = 1 ou p é primo.
O regex
torna-se p> 1 , exigindo que pelo menos dois 1 's (
11+
) e armazena a cauda de 1 está no segundo grupo de captura (\2
).Finalmente, o olhar positivo por trás
verifica se a entrada inteira consiste em ocorrências de kp ( k ≥ 1 ) de 1 , verificando se p divide a entrada.
Assim, cada correspondência corresponde a um divisor principal exclusivo p .
fonte
Utilitários Bash + GNU, 33
Experimente online .
Explicação
fonte
grep -Po ' \d+'
salva um bytetr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
falha na entrada 46 .Geléia , 3 bytes
uma resposta bastante chata ...
Um link monádico pegando um número e retornando um número
Experimente online!
Quão?
fonte
Æv
?Æ
é o código alt 0198. 2. Você pode configurar um teclado (não o tenho). 3. A página de código.Ohm v2 , 2 bytes
Experimente online!
Os dois built-ins estão próximos um do outro na documentação lol.
fonte
Gelatina , 2 bytes
Ainda outra resposta bastante chata ... --- J. Allan
Experimente online!
Um embutido.
fonte
Alice , 10 bytes
Experimente online!
Explicação
Essa é apenas a estrutura padrão para programas aritméticos pesados lineares que precisam de E / S decimal. O programa atual é então apenas:
O que faz:
fonte
JavaScript 45 bytes
* Para o @SEJPM, solicite uma explicação: o que estou fazendo aqui é passar de 2 - n (que muda e, eventualmente, será o maior fator primordial) - agora, se a divisão do número atual ni quiser contar apenas uma vez (mesmo embora possa ser um fator de 2 * 2 * 2 * 3-2 é contado uma vez) - então o "j" aparece na imagem, quando j não é especificado na chamada da função - j receberá o valor de " undefined ", e quando n% i == 0, chamo a função com j = 1 na próxima chamada) - e adiciono apenas 1 quando j é igual a undefined, que é! j + Function (n / i, i, ( j = 1 ou apenas 1)). não mudo i nesse assunto, pois ainda pode ser divisível por i novamente (2 * 2 * 3), mas j será igual a 1 e não será considerado um fator. Espero que eu tenha explicado bem o suficiente.
Se o último primo for muito grande, ele terá uma pilha máxima de chamadas - se for um problema, eu posso criar um iterativo
fonte
CJam ,
75 bytesObrigado a Martin Ender por 2 bytes de desconto!
Bloco anônimo (função) que espera o número de entrada na pilha e o substitui pelo número de saída.
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Braquilog , 3 bytes
Experimente online!
Explicação
fonte
Pitão, 3 bytes
Suíte de teste
Comprimento (
l
) do conjunto ({
) de fatores primos (P
) da entrada.fonte
Casca , 3 bytes
Experimente online!
Explicação
fonte
Na verdade , 2 bytes
Ainda outra resposta bastante chata ... --- J. Allan
Experimente online!
O primeiro caractere pode ser substituído por
w
.fonte
Pyke , 3 bytes
Experimente aqui!
fonte
Python 3 ,
6867 bytes1 byte removido graças a @ Mr.Xcoder
Isso expira nos maiores casos de teste. Experimente online!
fonte
Números R +,
3014 bytes16 bytes removidos graças a @Giuseppe
Além disso, aqui está o Experimente online !! link para @ Giuseppe.
fonte
f=function(x)
eo(x)
quantonumbers::omega
é uma função já. No entanto, comonumbers
não é padrão para R, você deve responder "números R +". Além disso, você deve incluir um link TIO . Ainda assim, +1, muito bom.MATL
solução é muito boa (+1 ontem).numbers::
. Caso contrário, para mim é o mesmo que usar umimport
em qualquer outro idioma.Convexo , 3 bytes
Experimente online!
fonte
Pari / GP , 5 bytes
Não sei por que é chamado nu no Mathematica, mas ômega no Pari / GP.
Experimente online!
fonte
Haskell , 58 bytes
-4 bytes graças a @Laikoni
Experimente online!
Explicação
Essencialmente, gera todos os números primos no máximo
n
e os filtra por serem um fator de n e, em seguida, leva a duração do resultado.fonte
sum[1|x<- ... ]
vez delength
.Japt,
54 bytesTente
Obtenha os divisores (
â
) e conte (è
) os primos (j
).fonte
ARBLE , 28 bytes
Experimente online!
Esta é uma solução muito literal
fonte
Dyalog APL , 17 bytes
Experimente online!
fonte
Python 2 ,
6355 bytesUma resposta muito mais interessante ...
-8 bytes graças a Jonathan Frech (use um argumento com um padrão para o pós-ajuste do resultado de primos de
0
para1
- muito melhor que um lambda de empacotamento !!)Uma função recursiva que pega um número inteiro positivo
n
e retorna um número inteiro positivo, a contagem.Experimente online! Realmente ineficiente, nem se preocupe com os outros casos de teste.
fonte
J, 12 bytes
q:
é a função de expoentes primários de J, fornecendo a ele o argumento que__
produz uma matriz cuja primeira linha é todos os fatores primos diferentes de zero e cuja segunda linha é seus expoentes.Tomamos a forma
$
dessa matriz - linhas por colunas - o número de colunas é a resposta que buscamos.{:
nos fornece o último item desses dois itens (num linhas, num colunas) e, portanto, a resposta.Experimente online!
fonte
Java (OpenJDK 9) , 67 bytes
Experimente online!
fonte
Javascript ES6, 56 caracteres
Teste:
fonte