Um inteiro é primo se, e somente se, for positivo e tiver exatamente 2 divisores distintos: 1 e ele próprio. Um par primo gêmeo é composto de dois elementos: p
e p±2
, ambos são primos.
Você receberá um número inteiro positivo como entrada. Sua tarefa é retornar uma verdade / falsidade, dependendo de o número inteiro pertencer a um par duplo, seguindo as regras padrão do problema de decisão (os valores precisam ser consistentes).
Casos de teste
Verdade (Twin Primes):
3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43
Falsy (não Twin Primes):
2, 15, 20, 23, 37, 47, 97, 120, 566
Isso é código-golfe , então o código mais curto em bytes vence!
code-golf
number
decision-problem
primes
Taylor Scott
fonte
fonte
Respostas:
Braquilog ,
98 bytesExperimente online!
Explicação
fonte
√
Uso inteligente ! +1Geléia ,
109 bytesExperimente online!
fundo
Com exceção de (3, 5) , todos os pares primos gêmeos têm a forma (6k - 1, 6k + 1) .
Como (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 e
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 , dada uma entrada n> 3 , é suficiente verificar se n e n + n% 6 - 3 são primos.
Esta fórmula acontece para trabalho para n = 3 , bem como, como 3 + 3% 6-3 = 3 é primo e 3 é um número primo duplo.
Como funciona
fonte
Python 3 , 53 bytes
Experimente online!
fundo
Todos os números inteiros assumem uma das seguintes formas, com o número k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Como 6k - 2 , 6k e 6k + 2 são todos pares e como 6k - 3 é divisível por 3 , todos os números primos, exceto 2 e 3, devem ter a forma 6k - 1 ou 6k + 1 . Como a diferença de um par primo gêmeo é 2 , com exceção de (3, 5) , todos os pares primos gêmeos têm a forma (6k - 1, 6k + 1) .
Seja n da forma 6k ± 1 .
Se n = 6k -1 , então n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Se n = 6k + 1 , então n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Assim, se n faz parte de um par primo gêmeo en ≠ 3 , seu gêmeo será n + n% 6 - 3 .
Como funciona
O Python não possui um teste de primalidade interno. Embora existam maneiras breves de testar um único número de primalidade, fazê-lo para dois números seria demorado. Em vez disso, vamos trabalhar com divisores.
conta quantos inteiros k no intervalo [2, 4n) dividem (n + n% 6 - 3) n uniformemente, ou seja, contam o número de divisores de (n + n% 6 - 3) n no intervalo [2 , 4n) . Afirmamos que essa contagem é 2 se e somente se n fizer parte de um par primo gêmeo.
Se n = 3 (um primo duplo), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 tem dois divisores ( 3 e 9 ) em [2, 12) .
Se n> 3 é um primo gêmeo, como visto anteriormente, m: = n + n% 6 - 3 é seu gêmeo. Nesse caso, mn possui exatamente quatro divisores: 1, m, n, mn .
Como n> 3 , temos m> 4 , então 4n <mn e exatamente dois divisores ( m e n ) caem no intervalo [2, 4n) .
Se n = 1 , então (n + n% 6 - 3) n = 1 + 1 - 3 = -1 não tem divisores em [2, 4) .
Se n = 2 , então (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 possui um divisor (ele mesmo) em [2, 8) .
Se n = 4 , então (n + n% 6 - 3) n = 4 (4 + 4-3) = 20 possui quatro divisores ( 2 , 4 , 5 e 10 ) em [2, 16) .
Se n> 4 for par, 2 , n / 2 e n todos dividirão n e, portanto, (n + n% 6 - 3) n . Como temos n / 2> 2 desde n> 4 , há pelo menos três divisores em [2, 4n) .
Se n = 9 , então (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 possui três divisores ( 3 , 9 e 21 ) em [2, 36) .
Se n> 9 é um múltiplo de 3 , 3 , n / 3 e n dividem n e, portanto, (n + n% 6 - 3) n . Como temos n / 3> 3 desde n> 9 , há pelo menos três divisores em [2, 4n) .
Finalmente, se n = 6k ± 1> 4 não é um primo duplo, n ou m: = n + n% 6 - 3 deve ser composto e, portanto, admitir um divisor adequado d> 1 .
Uma vez que ambos os n = m + 2 ou m = n + 2 e n, m> 4 , os números inteiros de d , m , e n são distintos divisores de MN . Além disso, m <n + 3 <4n desde n> 1 , então mn tem pelo menos três divisores em [2, 4n) .
fonte
05AB1E ,
109 bytesGuardado 1 byte graças a Datboi
Experimente online! ou como um conjunto de testes
Explicação
fonte
ÌIÍ‚
vez de40SÍ+
-1 bytePHP, 52 bytes
sem GMP, 84 bytes
(usando minha função principal do estouro de pilha )
Corra como cano com
-nF
. Saída vazia por falsidade,1
por verdade.Ótima solução de Dennis portada para PHP, 56 bytes
Execute como pipe
-nR
ou experimente online .fonte
Mathematica, 33 bytes
Experimente online!
fonte
MATL , 11 bytes
A saída é
0
ou1
.Experimente online!
Explicação
fonte
Pitão ,
14 1211 bytesSuíte de teste.
Economizou 3 bytes usando a fórmula na resposta de @Dennis '. Guardou 1 byte graças a @Dennis.
Pitão , 14 bytes * Solução inicial
Suíte de teste.
fonte
Retina ,
4544 bytesRetorna 1 se a entrada for um gêmeo primo, 0 caso contrário
Experimente online!
Explicação
Converter em Unário
Coloque n-2, n e n + 2 em suas próprias linhas
(Nova linha à direita) Remova todos os compostos maiores que 1
Verifique se existem dois primos consecutivos (ou 1,3, porque 3 é um primo duplo)
fonte
Perl 6 , 24 bytes
Experimente online!
*
é o argumento para essa função anônima.0 & (-2 | 2)
é a junção que consiste nos números0
AND ou-2
OR2
. Adicionar*
a essa junção produz a junção do número*
E qualquer um dos números* - 2
OR* + 2
. Chamar ois-prime
método nessa junção retorna um valor verdadeiro se*
for primo E ou* - 2
OR* + 2
for primo. Finalmente, o?
colapso da junção verdade para um valor booleano, satisfazendo a condição de valores de retorno consistentes.fonte
JavaScript,
91 bytes, 81 bytes graças a Jared SmithExplicação
p
informa se o número fornecidon
é primo ou não et
testa o númeron
en±2
.Exemplo
Mostrar snippet de código
fonte
var
, os parênteses em torno dan
definição de função etc.n
lado o valor det(n)
para maior clareza (Ex.7: true
)J, 23 bytes
Experimente online!
quão?
fonte
3>0#.@p:0 2 _2&+
05AB1E , 8 bytes
Resposta da geléia do Porto de Dennis
Experimente online! ou como um conjunto de testes
Explicação
fonte
Ruby, 38 + 6 = 44 bytes
Requer opções
-rprime
.Experimente online!
fonte
&
em vez de&&
JavaScript (ES6), 54 bytes
Mostrar snippet de código
fonte
Excel VBA,
102100 bytesSem built-ins de primalidade para VBA :(
Código
Função de janela imediata VBE anônima que recebe entrada da célula
[A1]
e gera1
(verdade) ou0
(falsy) para a janela Imediata do VBEFunção auxiliar
Como alternativa, 122 bytes
Código
Solução baseada em função de verificação recursiva de primalidade
Função auxiliar
fonte
PHP, 85 bytes 24 bytes graças a Mayube
fonte
a
eb
)function
palavra - chave?Python 2 , 75 bytes
Experimente online!
fonte
Japonês , 13 bytes
Retorna
true
efalse
se o número faz ou não parte de um par gêmeo principal.Experimente online!
Explicação
Implícito:
U
= número inteiro de entradaVerifique se a entrada é prime (
j
), AND (©
) ...Usando a matriz
[U+2, U-2]
, verifique se algum item é verdadeiro (d
) de acordo com a função de primalidade (j
).Saída implícita do resultado booleano de
is input prime AND is any ±2 neighbor prime
.fonte
[U+2U-2]
poderia ser muito mais curto, mas eu não consigo descobrir como ...