Hilbert-Zahlen sind als positive ganze Zahlen der Form 4n + 1
für definiert n >= 0
. Die ersten Hilbert-Zahlen sind:
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
Die Hilbert-Nummernfolge ergibt sich aus der OEIS-Folge A016813 .
Eine verwandte Zahlenfolge, die Hilbert-Primzahlen, sind als die Hilbert-Zahlen definiert H > 1
, die durch keine Hilbert-Zahl teilbar sind, k
so dass 1 < k < H
. Die ersten Hilbert-Primzahlen sind:
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
Natürlich hat OEIS auch diese Reihenfolge .
Bei einer n
solchen Ganzzahl wird 0 <= n <= 2^16
als Eingabe die n
th-Hilbert-Primzahl ausgegeben .
Dies ist Codegolf , daher gelten Standardregeln, und der kürzeste Code in Bytes gewinnt.
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert die Rangliste aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamtrangliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](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>
Antworten:
Pyth, 21 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
Haskell, 46 Bytes
Eine anonyme Funktion.
Der Kern ist
foldr(\a b->a:[x|x<-b,mod x a>0])[][5,9..]
, der die arithmetische Abfolge durchläuft und5,9,13,...
jeweils ein Vielfaches aus der Liste rechts davon entfernt. Dies ergibt die unendliche Liste der Hilbert-Primzahlen. Dann!!
nimmt man dasn
th-Element.Ich habe versucht,
(\a b->a:[x|x<-b,mod x a>0])
pointfree zu machen, aber keinen kürzeren Weg gefunden.quelle
foldr
in ein anderes Listenverständnis([x|x<-[5,9..],all((>0).mod x)[5,9..x-1]]!!)
CJam,
36333223 BytesProbieren Sie es online aus
Die neueste Version ist eigentlich viel mehr bei MartinBüttner als bei mir. Die Schlüsselidee in seiner vorgeschlagenen Lösung besteht darin, zwei verschachtelte Schleifen zu verwenden, um den n-ten Wert zu finden, der die Bedingung erfüllt. Ich dachte, ich wäre schlau, wenn ich in meiner ursprünglichen Lösung nur eine einzige Schleife verwenden würde, aber es stellte sich heraus, dass die zusätzliche Logik mehr kostet, als ich gespart habe, wenn ich keine zweite Schleife verwendet habe.
Erläuterung
quelle
Minkolang 0.14 ,
463732 BytesIch wusste nicht, dass der Gosub völlig unnötig ist ...> _>
Probieren Sie es hier aus und überprüfen Sie alle Testfälle hier .
Erläuterung
Das Register wird zum Speichern des Zielindex verwendet. Die äußere while-Schleife berechnet jede Hilbert-Zahl und führt eine Buchhaltung durch. Die innere while-Schleife prüft jede Hilbert-Nummer auf Primalität. Wenn eine Hilbert-Zahl keine Hilbert-Primzahl ist, wird das Ziel inkrementiert, sodass die äußere while-Schleife (mindestens) ein weiteres Mal wiederholt werden muss, wodurch Hilbert-Komposite effektiv übersprungen werden.
quelle
Mathematica, 65 Bytes
Erzeugt die gesamte Liste und wählt das Element aus.
quelle
Ruby, 60 Bytes
Prüft nur Hilbert-Primfaktoren.
quelle
JavaScript (ES6), 73 Byte
Überprüfen Sie einfach die Hilbert-Nummern nacheinander, bis wir die n-te Hilbert-Primzahl erreichen. Die Teilbarkeit durch die Hilbert-Zahl wird von Regex übernommen.
quelle
Matlab, 74
83BytesVielen Dank an Tom Carpenter für das Entfernen von 9 Bytes!
Beispiel Verwendung:
quelle
Julia, 73 Bytes
Vielen Dank an Alex A. für das Speichern von 11 Bytes! Dies verwendet den gleichen Algorithmus wie die Matlab- und Ruby-Antworten. Da Julia-Arrays einindiziert sind, beginnt dies mit
f(1) == 5
.Mein erster Versuch mit dem Lazy-Paket ist 106 Bytes . Wenn Sie dies in REPL ausführen möchten, müssen Sie an den Zeilenenden Semikolons einfügen, um die unendliche Ausgabe zu unterdrücken. Und rufen
Pkg.Add("Lazy")
Sie an, wenn Sie es noch nicht installiert haben.quelle
n->(a=[x=5];while length(a)<n x+=4;all(k->mod(x,k)>0,a)&&push!(a,x)end;x)
endof
anstelle vonlength
undx%k
anstelle von verwendenmod(x,k)
.