Dado um número natural , retorne o ésimo primo cubano .
Primes cubanos
Um primo cubano é um número primo da forma
onde e ou
Detalhes
- Você pode usar a indexação baseada em 0 ou 1, o que melhor lhe convier.
- Você pode retornar o ésimo primo, dado o índice ou o primeiro primos em ordem crescente, ou alternativamente, pode retornar uma lista / gerador infinito que produz os primos em ordem crescente.
Casos de teste
Os primeiros termos são os seguintes:
(#1-13) 7, 13, 19, 37, 61, 109, 127, 193, 271, 331, 397, 433, 547,
(#14-24) 631, 769, 919, 1201, 1453, 1657, 1801, 1951, 2029, 2269, 2437,
(#25-34) 2791, 3169, 3469, 3571, 3889, 4219, 4447, 4801, 5167, 5419,
(#35-43) 6211, 7057, 7351, 8269, 9241, 10093, 10267, 11719, 12097,
(#44-52) 12289, 13267, 13669, 13873, 16651, 18253, 19441, 19927, 20173
Mais termos podem ser encontrados no OEIS: Eles são divididos em duas seqüências, dependendo de ou : A002407 e A002648
Respostas:
JavaScript (V8) , 54 bytes
Um programa completo que imprime números primos cubanos para sempre.
Experimente online!
Nota: A menos que você tenha papel infinito na impressora, não tente executá-lo no console do navegador , onde
print()
pode ter um significado diferente.JavaScript (ES6),
63 61 6059 bytesRetorna on ésimo primo cubano, indexado em 1.
Experimente online!
Quão?
Isso se baseia no fato de que os primos cubanos são primos da forma:
A fórmula acima pode ser escrita como:
ou para qualquery>0 :
que éx3−y3x−y parax=y+1 ex=y+2 respectivamente.
fonte
05AB1E ,
16129 bytesGera uma lista infinita.
Economizou 4 bytes com a fórmula do porto de Arnaulds, de Kevin Cruijssen .
Economizou mais 3 bytes graças ao Grimy
Experimente online!
Explicação
fonte
N^2+3
na pilha " deve ser3*N^2
. Além disso, por que o em)
vez de¯
? Porque é mais fácil digitar? E, por alguma razão, tenho a sensação de queNnN‚3*¬sO‚
pode ser 1 byte menor, mas não estou vendo. Uma alternativa leve de byte igual éNn3*DN3*+‚
. Mas provavelmente estou vendo coisas que não estão lá ..;) Resposta agradável, então +1 de mim.R ,
7573 bytesExperimente online!
-2 bytes, percebendo que posso remover colchetes se eu usar em
*
vez de&
(precedência diferente).Produz o
n
primeiro número cubano (1-indexado).Ele usa o fato (dado em OEIS) de que os primos cubanos têm a formap=1+3n2 ou 4p=1+3n2 para alguns n , ou seja, n=a⋅p−13−−−−√ é um número inteiro paraa=1 oua=4 .
O truque é que não nobre pode ser da forma de2p=1+3n2 ou 3p=1+3n2 (*), de modo que pode poupar 2 bytes, verificando a fórmula para a∈{1,2,3,4} ( a∈{1,4} (
1:4
) em vez dec(1,4)
).Versão ligeiramente não destruída do código:
(*) Nenhum primo pode ter a forma3p=1+3n2 , caso contrário 1 = 3 ( p - n2) seria divisível por 3 .
Nenhum primo diferente dep = 2 (que não é um primo cubano) pode da forma 2 p = 1 + 3 n2 : n precisaria ser ímpar, ou seja, n = 2 k + 1 . Expandindo dá 2 p = 4 + 12 k ( k + 1 ) , portanto, p = 2 + 6 k ( k + 1 ) e p seria mesmo.
fonte
Wolfram Language (Mathematica) ,
666556 bytesExperimente online!
J42161217 -1 usando em
⌊ ⌋
vez deFloor[ ]
attinat
⌊3#/4#⌋
vez de⌊3#^2/4⌋
For[n=i=0,i<#,PrimeQ@f@++n&&i++]
vez den=2;i=#;While[i>0,i-=Boole@PrimeQ@f@++n]
fonte
Java 8,
94888684 bytes-6 bytes usando o verificador principal de Java do @SaraJ , portanto, faça um voto positivo!
-2 bytes graças a @ OlivierGrégoire . Como o primeiro número que verificamos é
7
, podemos descartar o rastreio%n
do verificador principal da Sara, que é o fim do loopn=1
.-2 bytes graças a @ OlivierGrégoire, portando a resposta de @Arnauld .
Saídas delimitadas por espaço indefinidamente.
Experimente online.
Explicação (da versão antiga de 86 bytes): TODO: Atualizar explicação
fonte
v->{for(int n=7,i=3,p,x,d,r=0;;i+=++r%2*3,n+=i,System.out.print(x>1?x+" ":""))for(x=n,d=1;++d<n;x=x%d<1?0:n);}
talvez alguém possa usar isso para jogar golfe? Não pude.,p
e mudandoi+=++r%2*3,n+=i
paran+=i+=++r%2*3
, mas ainda assim eu terminarei em 106 bytes. Usando Java 11 deString#repeat
com primeiro-regex é de 105 bytes:v->{for(int n=7,i=3,r=0;;n+=i+=++r%2*3)if(!"x".repeat(n).matches(".?|(..+?)\\1+"))System.out.println(n);}
.%n
não é obrigatório, é?Wolfram Language (Mathematica) , 83 bytes
Experimente online!
fonte
Gelatina , 12 bytes
Experimente online!
Com base no método de @ Arnauld . Aceita stdin e retorna muitos primos cubanos.
fonte
Wolfram Language (Mathematica) , 83 bytes
Esta solução produzirá o n-ésimo primo cubano com os benefícios adicionais de ser rápido e lembrar de todos os resultados anteriores no símbolo f.
Experimente online!
fonte
Espaço em branco , 180 bytes
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Saídas delimitadas por nova linha indefinidamente.
Experimente online (apenas com espaços brutos, tabulações e novas linhas).
Explicação em pseudo-código:
fonte
Python 3 ,
110108102 bytesMétodo semelhante ao da minha resposta do Mathematica (ie
isPrime(1+⌊¾n²⌋) else n++
), usando este verificador primário golfista e retornando um gerador infinito anônimoExperimente online!
count
em 2 +1, para que oand x>1
check-in emprestado seja desnecessário -7fonte
g=
. Eu só o incluí em primeiro lugar porque permitiu um rápido visual no TIO comprint(next(g) for i in range(52))
.Japonês ,
1413 bytesAdaptado da fórmula de Arnauld . 1 indexado.
Tente
1 byte salvo graças ao EmbodimentOfIgnorance.
fonte
(
.Raquete , 124 bytes
Experimente online!
Retorna o n-ésimo primo cubano, indexado em 0.
Usa a fórmula da resposta JavaScript de @ Arnauld
fonte
Python 3 , 83 bytes
imprime os primos cubanos para sempre.
Experimente online!
Baseado neste gerador principal. Para cada primo, verifica se existe um número inteiro y que preencha a equação parax = 1 + y x = 2 + y
fonte
Perl 6 ,
3331 bytes-2 bytes graças ao Grimy
Experimente online!
Bloco de código anônimo que retorna uma lista infinita e lenta de números primos cubanos. Isso usa a fórmula de Arnauld para gerar possíveis números primos cubanos e depois
&is-prime
filtrá-los.Explicação:
fonte
1+0+|
pode ser justo1+|
Pari / GP , 51 bytes
Usando a fórmula de Arnauld .
Experimente online!
fonte
APL (NARS), 98 caracteres, 196 bytes
recuado:
teste:
é baseado em: se y em N, um possível Cuban Prime é
o próximo possível Cuban Prime será
fonte