Los números de Hilbert se definen como enteros positivos de la forma 4n + 1
para n >= 0
. Los primeros números de Hilbert son:
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
La secuencia numérica de Hilbert está dada por la secuencia OEIS A016813 .
Una secuencia numérica relacionada, los primos de Hilbert, se definen como los números de Hilbert H > 1
que no son divisibles por ningún número de Hilbert k
tal que 1 < k < H
. Los primeros primos de Hilbert son:
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, OEIS también tiene esta secuencia .
Dado un entero n
tal que 0 <= n <= 2^16
como entrada, salga el n
th Hilbert prime.
Este es el código de golf , por lo que se aplican reglas estándar, y gana el código más corto en bytes.
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera la tabla de clasificación a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntuación, se puede mantener viejas cuentas en el título, golpeándolos a través. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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>
Respuestas:
Pyth, 21 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
Haskell, 46 bytes
Una función anónima.
El núcleo es
foldr(\a b->a:[x|x<-b,mod x a>0])[][5,9..]
, que itera a través de la progresión aritmética5,9,13,...
, eliminando múltiplos de cada uno de la lista a su derecha. Esto produce la lista infinita de primos de Hilbert. Luego,!!
toma eln
elemento th.Intenté hacer un punto
(\a b->a:[x|x<-b,mod x a>0])
libre pero no encontré un camino más corto.fuente
foldr
comprensión en otra lista ahorra dos adiós:([x|x<-[5,9..],all((>0).mod x)[5,9..x-1]]!!)
CJam,
36333223 bytesPruébalo en línea
La última versión es en realidad mucho más @ MartinBüttner que la mía. La idea clave en su solución sugerida es usar dos bucles anidados para encontrar el enésimo valor que cumple la condición. Pensé que estaba siendo inteligente al usar solo un bucle en mi solución original, pero resulta que la lógica agregada cuesta más de lo que ahorré al no usar un segundo bucle.
Explicación
fuente
Minkolang 0.14 ,
463732 bytesNo me di cuenta de que el gosub era totalmente innecesario ...> _>
Pruébelo aquí y verifique todos los casos de prueba aquí .
Explicación
El registro se utiliza para almacenar el índice de destino. El bucle while exterior calcula cada número de Hilbert y realiza un poco de contabilidad. El bucle while interno verifica la primalidad de cada número de Hilbert. Si un número de Hilbert no es un primo de Hilbert, entonces el objetivo se incrementa de modo que el bucle while externo tenga que repetirse (al menos) una vez más, omitiendo efectivamente los compuestos de Hilbert.
fuente
Mathematica, 65 bytes
Genera la lista completa y selecciona el elemento de ella.
fuente
Rubí, 60 bytes.
Solo verifica los factores primos de Hilbert.
fuente
JavaScript (ES6), 73 bytes
Simplemente verifique los números de Hilbert uno por uno hasta que alcancemos el enésimo primer de Hilbert. La divisibilidad por número de Hilbert es manejada por regex.
fuente
Matlab, 74
83bytes¡Gracias a Tom Carpenter por eliminar 9 bytes!
Ejemplo de uso:
fuente
Julia, 73 bytes
¡Gracias Alex A. por guardar 11 bytes! Utiliza el mismo algoritmo que las respuestas de Matlab y Ruby. Dado que las matrices de Julia están indexadas, esto comienza con
f(1) == 5
.Mi primer intento, usando el paquete Lazy, es de 106 bytes . Si planea ejecutar esto en REPL, asegúrese de agregar punto y coma a los extremos de las líneas para suprimir la salida infinita. Y llame
Pkg.Add("Lazy")
si aún no lo tiene instalado.fuente
n->(a=[x=5];while length(a)<n x+=4;all(k->mod(x,k)>0,a)&&push!(a,x)end;x)
endof
lugar delength
y enx%k
lugar demod(x,k)
.