Oldukça fazla sayıda prime üretme işlevi vardır. Hemen hemen hepsi inşa edilir ve Eratosthenes, Möbius fonksiyonu veya Wilson teoreminin eleklerine dayanır ve genellikle pratikte hesaplama yapmak mümkün değildir. Ancak, çok kolay bir yapıya sahip olan ve kazara bulunan jeneratörler de var.
2003 yılında Stephen Wolfram, NKS Yaz Okulu'ndaki canlı bir bilgisayar deneyinde bir iç içe yineleme denklemi sınıfını keşfetti. Matthew Frank'ın etrafındaki bir grup insan ek deneyler yaptı ve basitçe nüksetmenin ilginç bir özelliğini keşfetti
a(n) = a(n-1) + gcd(n,a(n-1))
başlangıç değeri ile a(1) = 7
. Aradaki fark a(n) - a(n-1) = gcd(n,a(n-1))
her zaman 1 ya da ana gibi görünüyordu. İlk birkaç fark: ( OEIS A132199 ):
1, 1, 1, 5, 3, 1, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 3, 1, 5, 3, ...
Eğer sadece 1'leri atlarsak aşağıdaki sırayı alırız ( OEIS A137613 ):
5, 3, 11, 3, 23, 3, 47, 3, 5, 3, 101, 3, 7, 11, 3, 13, 233, 3, 467, 3, 5, 3,
941, 3, 7, 1889, 3, 3779, 3, 7559, 3, 13, 15131, 3, 53, 3, 7, 30323, 3, ...
Eric S. Rowland , birkaç yıl sonra bu listedeki her bir öğenin önceliğini kanıtladı. Görebildiğiniz gibi, primiler karıştırılır ve bazıları birden çok kez görünür. Aynı zamanda, dizinin sonsuz sayıda farklı primer içerdiği kanıtlanmıştır. Ayrıca, bütün garip primerlerin ortaya çıktığı varsayılmıştır.
Bu ana jeneratör inşa edilmediğinden, sadece kazayla bulunduğundan, ana jeneratöre "doğal olarak meydana gelen" adı verilir. Ancak pratikte bu jeneratörün de hesaplama yapmak için oldukça uygun olduğuna dikkat edin. Görünüşe göre, asal bir p sadece (p–3)/2
ardışık 1s sonra görünür . Bununla birlikte, bu ana jeneratörü uygulamak sizin göreviniz olacaktır.
Meydan okuma:
n
Dizinin ilk öğelerini basan bir işlev veya program yazın A137613
(1s dizisi olmayan). Giriş numarasını n >= 0
STDIN, komut satırı argümanı, hızlı ya da işlev argümanı üzerinden okuyabilirsiniz . İlk n
öğeleri herhangi bir okunabilir formatta STDOUT'a gönderin veya bu değerlere sahip bir dizi veya liste döndürün.
Bu kod golfü. Bu nedenle en kısa kod kazanır.
Liderler Sıralaması:
Burada hem düzenli bir lider tablosu hem de kazananların dile göre genel bir bakış oluşturması için bir Stack Snippet'i var. Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:
# Language Name, N bytes
N, gönderinizin büyüklüğüdür. Puanınızı yükseltirseniz, başlıkları üstüne vurarak eski skorları başlıkta tutabilirsiniz. Örneğin:
# Ruby, <s>104</s> <s>101</s> 96 bytes
var QUESTION_ID=55272;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<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="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><div id="language-list"> <h2>Winners 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><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>