Os números de Hilbert são definidos como números inteiros positivos do formulário 4n + 1
para n >= 0
. Os primeiros números de Hilbert são:
1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97
A sequência numérica de Hilbert é dada pela sequência OEIS A016813 .
Uma sequência numérica relacionada, os números primos de Hilbert, são definidos como os números de Hilbert H > 1
que não são divisíveis por nenhum número de Hilbert k
como esse 1 < k < H
. Os primeiros primos de Hilbert são:
5, 9, 13, 17, 21, 29, 33, 37, 41, 49, 53, 57, 61, 69, 73, 77, 89, 93, 97, 101, 109, 113, 121, 129, 133, 137, 141, 149, 157, 161, 173, 177, 181, 193, 197
Naturalmente, o OEIS também tem essa sequência .
Dado um número inteiro n
como, por 0 <= n <= 2^16
exemplo, output, o n
th Hilbert prime.
Isso é código-golfe , então as regras padrão se aplicam e o código mais curto em bytes vence.
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o cabeçalho das respostas a) como uma lista da solução mais curta por idioma eb) como um cabeçalho geral.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65895; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Respostas:
Pitão, 21 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
Haskell, 46 bytes
Uma função anônima.
O núcleo é
foldr(\a b->a:[x|x<-b,mod x a>0])[][5,9..]
, que itera através da progressão aritmética5,9,13,...
, removendo múltiplos de cada um da lista à sua direita. Isso produz a lista infinita de números primos de Hilbert. Então,!!
pega on
th elemento.Eu tentei fazer
(\a b->a:[x|x<-b,mod x a>0])
pointfree, mas não encontrei uma maneira mais curta.fonte
foldr
compreensão em outra lista economiza dois bytes:([x|x<-[5,9..],all((>0).mod x)[5,9..x-1]]!!)
CJam,
36333223 bytesExperimente online
A versão mais recente é realmente muito mais @ MartinBüttner do que a minha. A idéia principal em sua solução sugerida é usar dois loops aninhados para encontrar o n-ésimo valor que atenda à condição. Eu pensei que estava sendo inteligente usando apenas um único loop na minha solução original, mas acontece que a lógica adicionada custou mais do que eu economizei ao não usar um segundo loop.
Explicação
fonte
Número 0.14 ,
463732 bytesEu não percebi que o gosub era totalmente desnecessário ...> _>
Experimente aqui e verifique todos os casos de teste aqui .
Explicação
O registro é usado para armazenar o índice de destino. O loop while externo calcula cada número de Hilbert e faz alguma contabilidade. O loop while interno verifica cada número de Hilbert quanto à primalidade. Se um número Hilbert não for um primo Hilbert, o alvo será incrementado para que o loop while externo tenha que repetir (pelo menos) mais uma vez, ignorando efetivamente os compósitos Hilbert.
fonte
Mathematica, 65 bytes
Gera a lista inteira e seleciona o elemento dela.
fonte
Ruby, 60 bytes
Apenas verifica os fatores primos de Hilbert.
fonte
JavaScript (ES6), 73 bytes
Basta verificar os números de Hilbert, um por um, até chegar ao enésimo número Hilbert. A divisibilidade pelo número de Hilbert é tratada pelo regex.
fonte
Matlab, 74
83bytesObrigado a Tom Carpenter por remover 9 bytes!
Exemplo de uso:
fonte
Julia, 73 bytes
Obrigado Alex A. por salvar 11 bytes! Isso usa o mesmo algoritmo que as respostas Matlab e Ruby. Como as matrizes Julia são de um índice, isso começa com
f(1) == 5
.Minha primeira tentativa, usando o pacote Lazy, é de 106 bytes . Se você planeja executar isso no REPL, adicione ponto e vírgula às extremidades das linhas para suprimir a saída infinita. E ligue
Pkg.Add("Lazy")
se você ainda não o tiver instalado.fonte
n->(a=[x=5];while length(a)<n x+=4;all(k->mod(x,k)>0,a)&&push!(a,x)end;x)
endof
vez delength
e emx%k
vez demod(x,k)
.