Recentemente, li o romance "A solidão dos números primos ", onde os personagens principais são comparados aos números primos gêmeos (" sempre juntos, mas nunca tocando ").
Um primo gêmeo é um número primo que é 2 a menos ou 2 a mais que outro número primo - por exemplo, o par primo gêmeo (41, 43). Em outras palavras, um primo gêmeo é um primo que tem um intervalo primo de dois. Às vezes, o termo primo gêmeo é usado para um par de primos gêmeos; um nome alternativo para isso é primo gêmeo ou par primo. Wikipedia
Embora eu não tenha gostado muito do romance deprimente, e desde que eu caí no PPCG recentemente, isso levantou uma questão em minha mente ...
Tarefa:
Dado um número inteiro positivo N> 4, encontre os números primos solitários ( números primos isolados AKA ) entre os pares mais próximos de números primos gêmeos .
Observe que, neste caso, com o termo números primos solitários , quero dizer todos os números primos que não são primos gêmeos e entre pares de primos gêmeos . É por isso que N> 4, porque os dois primeiros pares de números primos são (3, 5) e (5, 7).
Exemplo:
- N = 90.
- Encontre os dois primeiros pares de primos gêmeos <N e> N. Eles são: (71, 73) e (101, 103).
- Encontre os primos solitários no intervalo> 73 e <101.
- São eles: 79, 83, 89, 97.
Casos especiais:
- Se N estiver entre dois números primos gêmeos, encontre os pares mais próximos de primos gêmeos> N + 1 e <N-1. Exemplo: N = 72, encontre os pares mais próximos de primos gêmeos> 73 e <71 e exclua da lista 71 e 73 porque não são primos solitários . Portanto, para N = 72, o resultado esperado é: 67,
71,73, 79, 83, 89, 97 - Se N pertence a um par de primos gêmeos, por exemplo N = 73, os pares mais próximos de primos gêmeos são (71, 73) e (101, 103). Se N = 71, os pares mais próximos de primos gêmeos são (59, 61) e (71, 73).
Casos de teste:
N = 70 > Lonely primes are: 67
N = 71 > Lonely primes are: 67
N = 72 > Lonely primes are: 67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73 > Lonely primes are: 79, 83, 89, 97
N = 90 > Lonely primes are: 79, 83, 89, 97
N = 201 > Lonely primes are: 211, 223
N = 499 > Lonely primes are: 467, 479, 487, 491, 499, 503, 509
Regras:
- Escreva um programa ou função completa que use o número N da entrada padrão.
- Saída da lista de números primos solitários em um formato legível como csv, list, array, etc.
- O menor código vence.
- Inclua (quando possível) um violino on-line testável.
Respostas:
Na verdade, 47 bytes
Essa solução lida com o caso
n
entre dois primos gêmeos, verificando se o limite inferior é o maior de um par de primos gêmeos (eliminando o primo gêmeo à esquerda de ser o limite inferior) e se o limite superior é o menor de um par de primos gêmeos (eliminando o primo gêmeo à nossa direita de ser nosso limite superior). Para impedir que os números primos gêmeos sejam incluídos em nosso intervalo, quando tivermos os limites inferior e superior, precisamos remover números primosp
ondep-2
ORp+2
é primo, daí o OR lógico e o negativo no código.Isso é um pouco longo e provavelmente pode ser jogado ainda mais. Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
23
quando a entrada24
é fornecida. Os limites primos gêmeos devem ser17 / 19
e29 / 31
, e23
é um primo isolado no intervalo19 .. 29
.p
diz que25
é primo ainda não foi corrigido, ou Dennis não o ativou desde a correção. Deixe-me ir verificar.PowerShell v2 +,
237149147231216181174169166 bytesRecebe entrada
$n
. Define uma nova funçãof
como a função regex prime (aqui retornando um Boolean se a entrada for prime ou não).A próxima parte
$i
é igual a$n
, então se move para cima até encontrarmos a metade inferior do nosso limite superior de pares primos gêmeos. Por exemplo, para entrada90
, isso para em$i=101
.Então, fazemos um loop do limite superior para baixo. Eu sei, parece um loop infinito, mas acabará eventualmente.
Se o número atual é um prime (
f(--$i)
), mas o seu+/- 2
não é um número primo, nós adicionamos$i
ao gasoduto. No entanto, se+/- 2
for um primo, verificamos se somos inferiores a$n-1
(ou seja, para explicar a situação quando ele está dentro de um par primo duplo), e nesse ponto nósexit
. Na conclusão do programa, o pipeline é impresso na tela via implícitoWrite-Output
.NB - Devido à estrutura de loop, imprime os primos em ordem decrescente. O OP esclareceu que está tudo bem.
Exemplos
A saída aqui é separada por espaço, pois esse é o método de stringification padrão para uma matriz.
fonte
Haskell, 105 bytes
Experimente Online
fonte
JavaScript,
186183168 168158 bytesfonte
PHP, 207 bytes
4754 bytes para ais_prime
função que o PHP não possui. Eu venceria o Mathematica sem isso. :-Dcorra com
-r
. imprime uma vírgula à direita.demolir
Nota :
A
is_prime
função realmente retornatrue
para$n<2
; mas pelo menos não produz um aviso. Insira$n=
antes$n>1
para corrigir.fonte
Mathematica,
169157 bytesfonte
Raquete 228 bytes
A desvantagem desta versão é que ela encontra todos os números primos até N e não apenas aqueles em torno de N.
Versão não destruída:
Teste:
Saída:
fonte
Raquete 245 bytes
Versão não destruída:
Saída:
fonte
Python 2.7: 160 bytes
sugestões são bem-vindas :)
fonte