Um número é um número de Polignac se, e somente se, for ímpar e não puder ser representado na forma p + 2 n, em que n é um número inteiro não negativo ep é um número inteiro primo.
Tarefa
Escreva um código que use um número inteiro positivo e determine se é um número de Polignac. Você pode gerar dois valores distintos, um para verdadeiro e outro para falso. Você deve minimizar sua contagem de bytes.
Casos de teste
Para casos positivos, aqui está o OEIS
1, 127, 149, 251, 331, 337, 373, 509, 599, 701, 757, 809, 877, 905, 907, 959, 977, 997, 1019, 1087, 1199, 1207, 1211, 1243, 1259, 1271, 1477, 1529, 1541, 1549, 1589, 1597, 1619, 1649, 1657, 1719, 1759, 1777, 1783, 1807, 1829, 1859, 1867, 1927, 1969, 1973, ...
Aqui estão alguns casos negativos:
22, 57
code-golf
number
number-theory
decision-problem
Assistente de Trigo
fonte
fonte
Respostas:
Japonês ,
91413 bytesTeste online! ou Encontre todos os números inteiros de Polignac abaixo de 1000 .
Saídas
1
para entradas falsas e verdadeiras0
.Explicação
fonte
false
mas não são números de Polignac.3
foi corrigido, mas não tivemos que lidar com casos nem no início. Fixação.3
não custar bytes, então eu vi a correção2
- Ai!Geléia ,
1110 bytesGuardado 1 byte graças a @Dennis
Experimente online!
Como funciona
fonte
Ḷ2*⁸_ÆPS<Ḃ
salva um byte. tio.run/##ASQA2/9qZWxsef//4bi2Mirigbhfw4ZQUzzhuIL/...¬;ḂẠ
.S<Ḃ
é a maneira fora da caixa, porém, pelo menos para mim :-)JavaScript (ES6),
56 5453 bytesRetorna0 ou 1 .
Experimente online!
Quão?
Começamos comp=1 . Testamos se y=n−p é composto e produzimos um booleano de acordo. O próximo teste é realizado com p×2 .
Assim quep for maior que n , paramos a recursão e retornamos n .
Os resultados de todas as iterações são AND 'juntos, coagindo os valores booleanos para0 ou 1 .
Desde que todos os resultados intermediários sejam verdadeiros, terminamos com um teste bit a bit, como:
1 & 1 & 1 & n
Isso fornece1 se e somente se n for ímpar, que é a última condição necessária para validar a entrada como um número de Polignac.
fonte
n%2
ou similar: PPython 2 ,
605756 bytesExperimente online!
fonte
&n&
. O número 5 seria um falso negativo se fosse um número de Polignac, porque 1 + 4 = 5, mas isso não é um problema, porque 2 + 3 = 5 de qualquer maneira.Gelatina , 10 bytes
Um envio alternativo de geléia de 10 bytes ao já publicado.
Um link monádico retornando 1 para os números de Polignac e 0 caso contrário.
Experimente online! ou veja os abaixo de 1000 .
Quão?
fonte
05AB1E ,
98 bytes-1 byte graças a Emigna
Saídas
0
para entradas1
verdadeiras e para entradas falsas.Experimente online!
fonte
1å
poderia serZ
.Python 2 , 99 bytes
Experimente online!
-4 bytes graças a Leaky Nun
-2 bytes graças ao Wondercricket
+8 bytes para corrigir um erro
-1 byte graças ao Sr. Xcoder
-3 bytes graças ao Einkorn Enchanter
+12 bytes para corrigir um erro
fonte
Regex (ECMAScript), 97 bytes
Esse problema representava um caso interessante para solucionar o problema de falta de um cabeçote não atômico. E é a única vez até agora que tive um bom motivo para colocar as duas versões do poder do teste 2
((x+)(?=\2$))*x$
e(?!(x(xx)+)\1*$)
, no mesmo regex, e o único tempo até agora necessário para proteger o teste principal contra a correspondência 1, como(?!(xx+)\1+$)xx
, quando usado em uma regex maior.^(?!(xx)*$|(x+)((?!(xx+)\4+$).*(?=\2$)((x+)(?=\6$))*x$|(?!(x(xx)+)\7*$).*(?=\2$)(?!(xx+)\9+$)xx))
Experimente online!
Regex (ECMAScript + pesquisa molecular),
5352 bytes^(?!(xx)*$|(?*xx+(((x+)(?=\4$))*x$))\2(?!(xx+)\5+$))
Esta versão não é apenas muito mais limpa, mas muito mais rápida, porque, em vez de ter que percorrer todas as maneiras possíveis em que N é a soma de dois números, ela pode apenas percorrer subtraindo cada potência de 2 de N e testar a diferença por ser a principal. .
A cabeça molecular lookah pode ser facilmente convertida em uma aparência de comprimento variável:
Regex (.NET ou ECMAScript 2018),
5554 bytes^(?!(xx)*$|xx+(((x+)(?=\4$))*x$)(?<=(?<!^\5+(x+x))\2))
Experimente online! (.NET)
Experimente online! (ECMAScript 2018)
fonte
^(?!(x+)((?!(xx+)\3+$)x*(?!(x(xx)+)\4*$)|x(?!(x(xx)+)\6*$)x*(?!(xx+)\8+$)x)?\1$)
sem muita dificuldade. Então, com uma reflexão cuidadosa, você poderá jogar mais^(?!(x+)((x?)(?!(x(x\3)+)\4+$)x*(?!(x(xx)+|\3\3+)\6+$)\3)?\1$)
. Mais curto ainda pode ser possível(x(xx)+|\3\3+)
->(x\3?(xx)+)
Mathematica, 41 bytes
fonte
PrimeQ[#-2^Range[0,Log2@#]]
porPrimeQ[#-2^Range[0,#]]
e depois porPrimeQ[#-2^Range@#/2]
.PHP , 75 bytes
imprime 1 para verdade e 0 para falsidade
Experimente online!
Experimente online! Polignac Inteiros abaixo de 10000
fonte
Pari / GP , 34 bytes
Experimente online!
fonte
Braquilog ,
1513 bytesExperimente online!
Saída de números Polignac até 1000.
Retorna
false.
para números de Polignac etrue.
outros.Com base na resposta excluída do @ LeakyNun, com algumas correções (postadas com sua permissão).
(-2 bytes usando o método de Jonathan Allan para verificar se o número é uma potência de dois.)
O número fornecido não é de Polignac se:
fonte
=h2
seria 1 byte mais curto, mas também não funciona3
.Gelatina , 13 bytes
Experimente online!
Saídas
1
para false e0
true.fonte
Ḷ2*ạfÆRṆ
em seguida, verificar se há paridadeḶ2*ạfÆRṆo‘Ḃ
retorna1
para ambos127
e22
; isso não está certo. A menos que não seja isso que você sugeriu.0
para 149.ạ
para_@
corrigi-lo.Perl 6 , 55 bytes
Experimente online!
(1, 2, 4 ... * > $_)
é uma sequência dos poderes de dois até o argumento de entrada (Perl infere a série geométrica a partir dos elementos fornecidos).grep &is-prime, ^$_
é a lista de números primos até o argumento de entrada.[X+]
avalia a soma de todos os elementos do produto cruzado das duas séries.Eu poderia ter feito sem o
so
por dois bytes a menos, mas, em seguida, ele retorna dois valores distintos de falsidade (0
eFalse
).fonte
Axioma, 86 bytes
teste e resultados
fonte
Haskell,
104102 bytesExplicação
(+)
função parcial aplicada a 2 ^ que é aplicada a uma lista [0..input]ATUALIZAÇÃO: Grite para o Einkorn Enchanter por jogar dois bytes!
fonte
p x=[x]==[i|i<-[2..x],x`mod`i<1]
é um teste de primalidade mais curto.filter p[1..k]
vez defilter(p)[1..k]
Lisp comum, 134 bytes
Retorne
NIL
quando o argumento for um número Polignac,T
caso contrário.Experimente online!
Ungolfed:
fonte
APL (Dyalog Extended) , 12 bytes
Experimente online!
Função tácita de prefixo anônimo. Retorna 1 para verdade, 0 para falsidade.
Basicamente baseado na resposta japonesa do ETHProductions .
Agradeço a @ Adám por ajudar no golfe minha resposta original e por fazer o Dyalog Extended nesse sentido.
Quão:
fonte
Python 2 , 98 bytes
Experimente online!
fonte
Pitão , 14 bytes
Tente!
fonte
Julia 0.4 , 31 bytes
Experimente online!
fonte
APL (NARS) 80 caracteres, 160 bytes
A função 0π é a função que retorna seu argumento é primária ou não. Para mim, essa função não é recursiva, por isso é um pouco mais longa ... Teste:
para entrada <= 0 ou entrada> = 9E9, retorna ¯1 (erro)
fonte
C # (compilador interativo do Visual C #) , 107 bytes
Experimente online!
Não é o código mais eficiente, mas parece funcionar. Minha solução original filtrou os primos antes de testá-los na fórmula e teve um desempenho muito melhor. A versão atual é 11 bytes menor.
fonte