Definição
Um semiprime sem quadrado é um número natural que é o produto de dois números primos distintos.
A tarefa
Dado um número natural n
, conte todos os semiprimes sem quadrados, iguais ou inferiores a n
.
Detalhes
Por favor, escreva uma função ou procedimento que aceite um único parâmetro inteiro e conte todos os semiprimes livres de quadrados menores ou iguais ao seu parâmetro. A contagem deve ser um valor de retorno de uma chamada de função ou ser impressa em STDOUT.
Pontuação
A resposta com o menor número de caracteres vence.
Em caso de empate, os seguintes critérios serão usados em ordem:
Pessoa mais altaMelhor complexidade de tempo
- Pior complexidade de espaço
Exemplos
f(1) = 0
f(62) = 18
f(420) = 124
f(10000) = 2600
console.log
?Respostas:
J,
50403837 caracteresUso:
Com agradecimentos a FUZxxl .
Teste de performance
Não sou um teórico, como já vimos aqui no passado, mas acho que a complexidade do tempo é algo como O (n p 2 ), em que n p é o número de primos até e incluindo o número de entrada n. Isso se baseia na suposição de que a complexidade do meu método (gerando uma tabela de multiplicação muito grande) supera em muito a complexidade da função de geração principal incorporada a J.
Explicação
f=:3 :'...'
declara um verbo (monádico) (função). A entrada para o verbo é representada pory
dentro da definição de verbo.p:i._1&p:y
Op:
verbo é o verbo primos multiuso, e é usado de duas maneiras diferentes aqui:_1&p:y
retorna o número de primos menor do quey
entãop:i.
gera cada um deles. Usando 10 como entrada:(~:/**/)~
gera a tabela da qual falei anteriormente.*/
gera uma tabela de multiplicação,~:/
gera uma tabela não-igual (para eliminar os quadrados) e ambos são multiplicados juntos. Usando nossa saída anterior como entrada:}.~.,
agora transformamos os números em uma lista,,
obtemos os valores exclusivos~.
e removemos o 0 no início}.
y<:
uma comparação com a entrada original para verificar quais valores são válidos:+/
e depois some isso para obter a resposta.fonte
+/-.x<}.~.,(~:/~*[*/])p:i._1&p:[x=.n
onde n é a entrada.f=:3 :'+/-.y<}.~.,(~:/~*[*/])p:i._1&p:y'
para 40 caracteres?3 :'...'
Mathematica
656455514739Código
A seguir, conta o número de semiprimes livres de quadrados menores ou iguais a
n
:Quaisquer fatores semiprimes livres de quadrados em uma estrutura do formulário:
{{p,1}{q,1}}
por exemplo,A rotina simplesmente conta os números no intervalo desejado que possuem essa estrutura de fatores.
Uso
Tempo: Todos os exemplos dados
Tempo: n = 10 ^ 6
Leva menos de quatro segundos para contar o número de semi-primos sem quadrado menor ou igual a um milhão.
fonte
=
e depois do,
realmente necessário são sintaticamente?Python, 115
fonte
f=lambda x:sum([(i*j<=x)&p(j)&p(i)for i in r(2,x)for j in r(2,i)])
salva 5 caracteres.itertools
na minha cabeça.Geléia , 7 bytes
Experimente online!
Como funciona
fonte
Python (139)
Forneça alguns resultados de amostra para que os concorrentes possam testar seus programas.
fonte
Ruby 82
Demonstração: http://ideone.com/cnm1Z
fonte
Python 139
fonte
Golfscript 64
Demonstração online aqui
Nota: Na demo acima eu excluídos os
420
e10000
teste casos. Devido ao teste de primalidade extremamente ineficiente, não é possível executar o programa para essas entradas em menos de 5 segundos.fonte
Shell, 40
Uso:
fonte
Geléia ,
1413 bytesExperimente online!
Críticas construtivas bem-vindas!
fonte
⁼
eS
pode ser transformada em um uso deċ
(Count). Você pode obter até 10 bytes usando-o. Vou deixar você resolver isso!Python 2/3 ,
9594 bytesExperimente online!
Publicado em um desafio de 6 anos, porque estabelece um novo recorde em Python; para a IMO, é uma abordagem bastante interessante.
Explicação
Python 2/3 (PyPy) ,
888281 bytesExperimente online!
Baseado em um golfe de 92 bytes da Value Ink. O PyPy é necessário para interpretar corretamente
0or
, porque o Python padrão vê isso como uma tentativa de um número octal.fonte
Stax , 8 bytes
Execute e depure
Descompactado, não jogado e comentado, parece com isso.
Execute este
fonte
Perl 6 ,
5845 bytesAgradecimentos a Jo King por -13 bytes.
Aproveita o fato de que números inteiros com quatro fatores são semiprimes sem quadrado ou cubos perfeitos.
Experimente online!
fonte
Braquilog , 7 bytes
Experimente online!
fonte
Retina , 58 bytes
Experimente online!
Toma como entrada unária com
_
como marca de contagemExplicação
Um número é um semi-primo sem quadrados, se o maior e o menor fator, excluindo-se ele e 1, forem primos.
Pega a entrada e gera cada número unário menor ou igual a ele, cada um em sua própria linha
Então, para cada número ...
Encontre o menor e o maior fator, excluindo-se 1 ...
e conte o número deles que é primo. Como o menor fator deve ser primo, isso retorna 1 ou 2
Conte o número total de 2's
fonte
Python 2 ,
105104 bytesExperimente online!
1 byte thx para squid 🦑
fonte
(p*p)
pode serp**2
Ruby
-rprime
, 64 bytesEu sei que há outra solução Ruby aqui, mas eu não queria fazer comentários com comentários desde que ela foi respondida em 2012 ... e, como se vê, usar um sinalizador de programa conta isso como um idioma diferente , então acho que isso tecnicamente não é "Ruby" de qualquer maneira.
Experimente online!
Explicação
fonte
APL (NARS), caracteres 26, bytes 52
teste:
esta é uma alternativa mais longa (59 caracteres que eu preferiria)
teste:
fonte