Introdução
A função de contagem primária , também conhecida como função Pi , retorna a quantidade de números primos menor ou igual a x.
Desafio
Seu programa pegará um número inteiro x que você pode assumir como positivo e produzirá um número inteiro igual à quantidade de números primos menor ou igual a x. Este é um desafio de código-golfe , portanto, o vencedor será o programa com o menor número de bytes.
Você pode usar qualquer idioma de sua escolha, desde que existisse antes desse desafio, mas se o idioma tiver uma função de contagem primária incorporada ou uma função de verificação de primalidade (como o Mathematica), essa função não poderá ser usada no seu código .
Exemplo de entradas
Entrada:
1
Saída:
0
Entrada:
2
Saída:
1
Entrada:
5
Saída:
3
Respostas:
05AB1E , 3 bytes
Isso pressupõe que os built-ins de fatoração são permitidos. Experimente online!
Como funciona
fonte
Python 2, 45 bytes
Usa o gerador principal do Teorema de Wilson . O produto
p
rastreia(k-1)!^2
ep%k
é 1 para números primos e 0 para não primos.fonte
MATL ,
11, 10, 8, 5 bytesExperimente online!
Eu escrevi uma versão que tinha uma explicação muito legal de como as matrizes do MATL funcionam:
:YF!s1=1
Mas não é mais relevante. Confira o histórico de revisões, se você quiser vê-lo.
Nova explicação:
Três bytes salvos graças à solução genial de Dennis
fonte
YF!s1=s
Geléia ,
85 bytes3 bytes salvos graças ao @Dennis!
Experimente online!
Porto da resposta MATL do DJMcMayhem (versão anterior) refinada por Dennis.
fonte
ÆE
, pois cada expoente corresponde a um fator primo diferente.RÆESL
alcança exatamente isso.!ÆEL
seria ainda mais curto.Modelos do MediaWiki com ParserFunctions , 220 + 19 = 239 bytes
Para chamar o modelo:
Organizados em estilo Lisp:
Apenas um teste básico de primalidade de 2 a n . Os números com três chaves ao redor são as variáveis, onde
{{{1}}}
é n ,{{{2}}}
é o número que está sendo testado,{{{3}}}
é o fator a ser verificado.fonte
Perl, 33 bytes
Inclui +1 para
-p
Dê o número de entrada no STDIN
primecount.pl
Dá o resultado errado,
0
mas tudo bem, o op pediu suporte apenas para números inteiros positivos.fonte
Retina, 31 bytes
A contagem de bytes assume a codificação ISO 8859-1. Converta a entrada em unário, gere o intervalo de
1
paran
, cada um em sua própria linha. Combine os números primos.Experimente online - Entrada muito maior que 2800 atinge o tempo limite ou fica sem memória.
Referências:
Martin's range generator
Verificador principal de Martin
fonte
Gelatina , 3 bytes
Experimente online!
Como funciona
fonte
Gelatina ,
13 11 10 9 8 76 bytesUsando nenhuma função primária integrada
-1 byte graças a @miles (use uma tabela)
-1 byte graças a @Dennis (converta de unário para contar os divisores)
TryItOnline
Ou veja os 100 primeiros termos da série
n=[1,100]
, também em TryItOnlineQuão?
fonte
%þ`¬Sċ2
usando uma tabela de restos.ḍþḅ1ċ2
salva um byte.JavaScript (ES6),
4543 bytesUma modificação da minha função de primalidade
363533 bytes (1 byte salvo por @Neil, 2 por @Arnauld):(Não consigo postar isso em nenhum lugar porque esse número é primo? Só aceita programas completos ...)
Snippet de teste
Mostrar snippet de código
fonte
&
no meio da sua função de primalidade.PowerShell v2 +, 98 bytes
Cuidado: Isso é lento para entradas grandes.
Basicamente, a pesquisa unária de Esse número é primo? , juntamente com um
for
loop e um$j++
contador. Um pouco de lógica adicional na frente para explicar as entradas de casos extremos1
e2
, devido à maneira como a vedação funciona nosfor
loops.fonte
05AB1E , 5 bytes
Supõe que os componentes principais de fatoração são permitidos.
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
ÅPg
é o que seria agora, certo?CJam , 7 bytes
Experimente online! Usa uma função de fatoração.
Explicação:
fonte
Gelatina , 6 bytes
Isso usa apenas aritmética básica e o teorema de Wilson. Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
C # 5.0
7877Ungolfed
fonte
Pitão -
76 bytesComo outros estão usando funções de fatoração primárias ...
Conjunto de Teste .
fonte
Bash + coreutils, 30
Ideone.
Pacote Bash + coreutils + BSD-games, 22
Esta resposta mais curto requer que você tenha o pacote bsdgames instalado:
sudo apt install bsdgames
.fonte
Pyke,
86 bytesExperimente aqui!
Agradecimentos a Maltysen pelo novo algoritmo
fonte
C #, 157 bytes
Programa completo com casos de teste:
Começa a demorar um pouco quando você ultrapassa 1 milhão.
fonte
Matlab, 60 bytes
Continuando meu apego às funções Matlab de uma linha. Sem usar uma fatoração integrada:
Dado que um primo
y
possui apenas dois fatores[1,y]
: contamos os números no intervalo[1,x]
que possuem apenas dois fatores.O uso da fatoração permite um encurtamento significativo (até 46 bytes).
Conclusão: É necessário olhar para eles idiomas de golfe: D
fonte
Na verdade, 10 bytes
Essa foi a solução mais curta que encontrei e não encontrou erros de intérprete no TIO. Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
Geléia , 3 bytes
O Jelly possui uma função de contagem primária incorporada
ÆC
e uma função de verificação primária, queÆP
, em vez disso, usa uma função geradora primária incorporadaÆR
e leva o comprimentoL
.Eu acho que isso é tão limítrofe quanto usar built-ins de fatoração primária, o que também levaria 3 bytes com
!Æv
(!
fatorial,Æv
fatores primários de contagem)fonte
PHP,
9692 bytesGuardado 4 bytes graças a Roman Gräf
Teste on-line
Código de teste ungolfed:
Teste on-line
fonte
isInt(...)?1:0
e não apenasisInt(...)
APL (Dyalog Unicode) , SBCS de 13 bytes
Experimente online!
⍳
Ɩ ndices 1 ... N⧽
∘.|
restante-tabela (usando os dois como eixos)⍳
ɩ ndices 1 ... N0+.=
a soma dos elementos igual a zero (ou seja, quantos divisores cada um possui)2+.=
a soma dos elementos igual a dois (ou seja, quantos primos existem)fonte
Python 3, 40 bytes
Um número inteiro ímpar k é primo se apenas se 2 ** (k-1) for congruente a 1 mod k. Assim, basta verificar esta condição e adicionar 1 para o caso de k = 2.
fonte
MATL , 9 bytes
Isso evita a decomposição do fator primo. Sua complexidade é O ( n ²).
Experimente online!
fonte
JavaScript (ES6),
50 + 246 + 243 bytesEconomizou
35 bytes graças a Neil:eval
pode acessar on
parâmetroAs
eval(...)
verificações sen
é primo.Soluções anteriores:
contagem de bytes deve ser +2 porque esqueci de nomear a função
f=
(necessária para recursão)46 + 2 bytes (economizados 3 bytes graças a ETHproductions):
50 + 2 bytes:
fonte
eval
pode acessar on
parâmetro para sua função (que você esqueceu de nomear, custando 2 bytes; é bom saber que eu não sou o único que cometeu esse erro) que economiza 5 bytes.eval
. Testado com firefox, chrome e edge funcionou para mim. A explicação é eval () analisa no contexto da declaração . Dois exemplos:a=12;f=b=>eval('a + 5');f(8)
monitores17
ea=12;f=a=>eval('a + 5');f(8)
monitores13
.Java 7.102 bytes
Força bruta
Ungolfed
fonte
1
. Atualmente, ele retorna em1
vez de0
. Você pode corrigir isto por qualquer mudançareturn c;
parareturn n<2?0:c;
ou alterar,c=1,
a,c=n<2?0:1,
.q 35 bytes
fonte
Na verdade, 10 bytes
Se minha primeira resposta Realmente não é permitida por usar uma função de geração primária, aqui está uma resposta alternativa usando o teorema de Wilson. Sugestões de golfe são bem-vindas. Experimente online!
Experimente online
fonte