Problema
O objetivo é, como o título diz, encontrar o enésimo nono primo, de modo que o primeiro - 1 seja divisível por n.
Explicação
Aqui está um exemplo para que você entenda a pergunta, não é necessariamente assim que deve ser resolvida. É apenas uma maneira de explicar a questão
dado 3 como entrada, veríamos primeiro todos os números primos
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 ...
Em seguida, selecionamos os primos de modo que o primo - 1 seja divisível por n (3 neste caso)
7 13 19 31 37 43 61 67 73 79 97 103 107 109 127 ...
Em seguida, selecionamos o enésimo termo nesta sequência
Produziríamos 19 para uma entrada de 3
Nota
Também podemos pensar nisso como o enésimo enésimo na sequência {1, n + 1, 2n + 1, 3n + 1 ... kn + 1} em que k é qualquer número natural
Casos de teste
1 --> 2
2 --> 5
3 --> 19
4 --> 29
100 --> 39301
123 --> 102337
code-golf
number
number-theory
primes
Ando Bando
fonte
fonte
Respostas:
05AB1E ,
98 bytes05AB1E usa a codificação CP-1252 .
Guardou um byte graças a Osable
Experimente online!
Explicação
fonte
µN¹*>Dp½
isso economiza um byte e acelera o cálculo.Python 2, 58 bytes
fonte
Mathematica, 48 bytes
Função sem nome usando um único argumento, que ele nomeia
n
. Gera uma lista dos primeirosn^3
números primos, seleciona aqueles que são congruentes a 1 módulo en
, em seguida, pega on
th elemento do resultado. É executado em alguns segundos na entrada 123.Atualmente, não se sabe se há sempre um único primo, entre os primeiros
n^3
primos, que é congruente a 1 módulon
, muito menosn
deles. No entanto, o algoritmo pode ser provado correto (pelo menos para grandesn
) sob a suposição da hipótese generalizada de Riemann !fonte
Haskell,
5947 bytesExemplo de uso:
f 4
->29
.Como funciona:
Edit: Obrigado @ Damien por 12 bytes, removendo o teste de divisibilidade e olhando apenas para múltiplos em primeiro lugar.
fonte
f n=[p|p<-[1,n+1..],all((<2).gcd p)[2..p-1]]!!n
Geléia , 9 bytes
Experimente online!
Como funciona
fonte
Java 7, 106 bytes
Ungolfed:
Código do teste:
Experimente aqui (o último caso de teste resulta em um limite de tempo excedido no ideone)
Saída:
fonte
System.out.println
são adicionados principalmente para que você possa ver qual entrada eu usei para fornecer a saída mostrada, e tudo também é fornecido caso alguém queira copiá-lo e colá-lo em seu IDE para brincar.Nasm 679 bytes (Instrução Intel 386 cpu 120 bytes)
este é um não destruído e os resultados
fonte
Na verdade , 13 bytes
Sugestões de golfe são bem-vindas! Experimente online!
Ungolfing
fonte
Lisp comum, 162 bytes
Uso:
Ungolfed:
Algumas dessas
loop
construções provavelmente podem ser encurtadas emdo
loops, mas é isso que tenho por enquanto.fonte
MATL , 12 bytes
Experimente online!
(Para entrada
123
, o tempo limite é excedido no compilador online, mas funciona offline.)Explicação
fonte
Perl,
7776 + 1 = 77 bytesUsa o regex de teste primário para determinar se
$p
é primo e garante que seja congruente 1 modificação da entrada (os únicos números inteiros não negativos abaixo de 2 são 0 e 1, mas não pode ser 0 se for primo, por isso é necessário be 1. economiza 1 byte acima==1
).fonte
(1 x++$.)!~/^(11+?)\1+$/&&($.%$_<2)&&push@a,$.while@a<$_;say$a[-1]
(é disso que eu estava falando no meu comentário anterior). No entanto, a saída (de qualquer versão) parece errada por pelo menos 2 e 3 ...Mathematica 44 Bytes
Muito rápido. Usa a ideia do "Note"
Saída
fonte
Perl 6 ,
46 3937 bytesfonte
Java 8, 84 bytes
Golfe
Ungolfed
Explicação
Solução inspirada em várias outras respostas. A função é uma lambda que espera um único int.
O
n>1?i:2
é um hack barato, porque não consegui descobrir uma maneira melhor de considerar o caso de n = 1.Além disso, essa solução expira em Ideone, mas foi testada para todos os casos de teste. Tempo limite porque, para economizar alguns bytes, fiz a
j<i
verificação explícita no loop interno. É principalmente implícito pori%j>0
... exceto no caso dei=1
ej=2
(a primeira iteração), caso em que o loop é executado até j exceder (estou assumindo). Depois, funciona bem para todas as iterações posteriormente.Para uma versão que não excede o tempo limite, são mais alguns bytes, veja aqui!
fonte
Raquete 109 bytes
Ungolfed:
Teste:
Saída:
fonte
Ruby 64 bytes
Chamado assim:
Além disso, este aplicativo de linha de comando funciona:
chamado assim
mas não tenho tanta certeza de como contar os caracteres. Acho que posso ignorar o nome do idioma, mas preciso incluir o
-rprime
espaço antes do nome do script, para que seja um pouco mais curto, aos 63 anos. . .fonte
R, 72 bytes
Terrivelmente ineficiente e lento, mas funciona. Ele lê a entrada de stdin e, em seguida, usa a
isPrime
função donumbers
pacote para encontrar os números primos. O resto está apenas verificando seprime - 1
é divisível porn
.fonte
JavaScript (ES6), 65 bytes
Utiliza o testador de primalidade regexp, pois é a) 8 bytes mais curto eb) menos recursivo do que minha abordagem recursiva pura.
fonte
Axioma 64 bytes
alguém sabe como escrever acima usando fluxos Axiom? ... algum exemplo
Tipo: Tuple NonNegativeInteger
fonte