Um intervalo primo é a diferença entre dois números primos consecutivos. Mais especificamente, se p e q são números primos com p < q e p 1, p 2, ..., q -1 não são números primos, o primos p e q definir um intervalo de n = q - p . Diz-se que a lacuna é iniciada por p e tem comprimento n .
Sabe-se que existem lacunas primárias arbitrariamente grandes. Ou seja, dado n , existe uma lacuna principal de comprimento n ou maior. No entanto, uma lacuna principal de comprimento exatamente n pode não existir (mas uma maior existir).
O desafio
Dado um número inteiro positivo n
, produza o primeiro primo que inicia uma lacuna de comprimento n
ou maior.
Como exemplo, para entrada, 4
a saída deve ser 7
, porque 7 e 11 são os primeiros primos consecutivos que diferem em pelo menos 4 (as lacunas anteriores são 1, de 2 a 3; 2, de 3 a 5; e 2, de 5 para 7). Para entrada, 3
a resposta também deve ser 7
(não há lacunas no comprimento 3).
Regras adicionais
O algoritmo deve teoricamente funcionar arbitrariamente alto
n
. Na prática, é aceitável se o programa for limitado pelo tempo, memória ou tamanho do tipo de dados.A entrada e a saída podem ser obtidas por qualquer meio razoável .
Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
O menor código em bytes vence.
Casos de teste
Input -> Output
1 2
2 3
3 7
4 7
6 23
10 113
16 523
17 523
18 523
30 1327
50 19609
100 370261
200 20831323
fonte
Respostas:
Gaia , 6 bytes
Isso é extremamente ineficiente (o
16
caso de teste levou mais de uma hora para calcular na minha máquina).Experimente online!
Explicação
A sequência parece ter a propriedade de que a (n) <= 2 ^ n .
fonte
Gelatina ,
10, 9, 810 bytesExperimente online!
Dois bytes salvos graças ao @Dennis! (e depois adicionado novamente devido a casos extremos)
Explicação:
fonte
#
contará a partir da entrada aqui) Parece razoável supor isso, mas eu não tenho idéia se é uma suposição válida. EDIT: FYI para correção (se necessário) prefixo2ð
Mathematica, 30 bytes
Experimente online!
Mathematica, 35 bytes
Experimente online!
Mathematica, 77 bytes
fonte
p
eq
são primos ... O primeiro código parece inválido, embora, porque ele só vai até 65535, a menos que você alimenta explicitamente o argumentoMaxIterations
.(For[t=2,NextPrime@t-t<#,t++];t)&
Haskell ,
106 102 93 77 7372 bytesIsso gera uma lista infinita de números primos primeiro, depois procura as lacunas primárias. A lista principal foi retirada daqui . Provavelmente pode ser encurtado, mas ainda não descobri como ainda :)
Obrigado a @BruceForte por -4 bytes e a @Zgrab por -1 byte!
Experimente online!
fonte
zip=<<tail$[...]
salva um byte.n
ele irá parar depois de uma quantidade finita de tempo :) (Haskell não é um procedimento, mas uma linguagem funcional com avaliação preguiçosa.)Pitão - 14 bytes
Ele filtra de [1, inf), filtrando por primality (
P_
) e que o próximo primo filtrado de (n, inf), tem um> = diferente para a entrada.Conjunto de Teste .
fonte
PowerShell ,
979691 bytesExperimente online!
Pega entrada
$n
, define$a
e$b
igual a2
, depois entra em umfor
loop infinito . Lá dentro, continuamos$b
até chegar ao próximo prime . Em seguida, verificamos se$b-$a
(ou seja, a lacuna) é-g
reaberturae
ou não$n
. Se for, nós produzimos$a
eexit
. Caso contrário, configuramos$a
para ser,$b
incrementar$b
e iniciar nossa próxima pesquisa.Aviso: Isso é lento para entradas grandes. Na verdade, ele não pode concluir os
50
testes ou mais altos dentro do tempo limite dos anos 60 no TIO. Ah bem.fonte
Casca ,
131110 bytesExperimente online!
fonte
Mathematica, 39 bytes
Versão de 33 bytes (não é válida porque só chega ao 65535º prime)
fonte
Python 2 ,
9688 bytes- 8 bytes Graças a @Maltysen
Experimente online!
fonte
Perl 6 , 63 bytes
Experimente online!
fonte
Mathematica, 37 bytes
Function
com o primeiro argumentog
. Começando com2
, aplica a funçãop=NextPrime
repetidamente enquantop@#-#<g&
derTrue
(a diferença entre o prime atual e o próximo prime é menor queg
).fonte
R + gmp, 55 bytes
Faz uso da função nextprime da biblioteca gmp
fonte
cat(s)
no final. A impressão implícita não funciona em programas completos.Ruby , 61 bytes
Experimente online!
fonte
C =
141109 bytes; C ++, D = 141 bytes; C #, Java = 143 bytesAVISO : ALGORITMO DE BAIXO DESEMPENHO
Este código não conseguiu calcular o intervalo principal por
g(200)
10 minutos. Porg(100)
10 segundos (versão C ++)Versão C ++ e D:
Versão C # e Java:
Versão C, -32 bytes graças ao ceilingcat:
Diferenças entre a versão C # / Java e C / C ++ / D:
!p(n)
<==>p(n)==0
fonte
return 0; return 1
e remover o!
anteriorp(++n)
d%i==0
e!(d%i)
pode serd%i<0
. Além disso, utilizando o sistema de modelo D's a solução em D pode ser:T p(T)(T d){for(T i=2;i<=d/2;++i)if(d%i<1)return 0;return 1;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;
. (A remoção de cintas após afor
eado
pode aplicar-se a C ++, bem)int p(int d){for(int i=2;i<=d/2;++i)if(!(d%i))return 0;return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;}
<- que deve funcionar para o C ++ versãoD,
127125122 bytesAVISO: ALGORITMO DE BAIXO DESEMPENHO !!
Experimente online!
Quão?
HatsuPointerKun novamente, mas eu farei a feitiçaria específica de D.
T p(T)(T d)
e é menor que C ++r=d%i++<1||r
, Travessuras específicas de D, podem funcionar em C / C ++, mas eu não sei.p(++n)
, o mesmo que acima, não tenho certeza se funciona em C / C ++while(p(++n)){}
, aqui se vê por que D é ruim no golfe, não se pode usar;
como uma declaração vazia.fonte
Perl 6 ,
4137 bytesExperimente online!
Explicação
fonte
QBIC , 28 bytes
Explicação
fonte
05AB1E , 9 bytes
Experimente online ou verifique todos os casos de teste . (O Conjunto de Testes não contém os dois últimos casos de teste, porque o TIO atinge o tempo limite.)
Como a outra pergunta é encerrada como uma bobagem dessa , também estou postando minha resposta aqui.
Explicação:
fonte
Java 8,
9992 bytesExperimente online. (O maior caso de teste é excluído, porque o tempo limite é excedido no TIO.)
Explicação:
fonte
Arrumado , 33 bytes
Experimente online!
Ou 28 caracteres / 34 bytes:
{x:({v:⊟v≤-x}↦primes+2)@0@0}
Vou explicar isso usando um equivalente ASCII equivalente:
fonte
APL (NARS), 36 caracteres, 72 bytes
1π é a função "next prime"; teste:
fonte