Bei einer nicht negativen Zahl n
geben Sie die Anzahl der Ausdrücke n
als Summe von zwei Quadraten mit ganzen Zahlen aus n == a^2 + b^2
( OEIS A004018 ). Beachten Sie, dass a
und b
positiv, negativ oder null sein kann und deren Reihenfolge von Bedeutung ist. Wenigste Bytes gewinnt.
Zum Beispiel n=25
gibt, 12
weil 25
ausgedrückt werden kann als
(5)^2 + (0)^2
(4)^2 + (3)^2
(3)^2 + (4)^2
(0)^2 + (5)^2
(-3)^2 + (4)^2
(-4)^2 + (3)^2
(-5)^2 + (0)^2
(-4)^2 + (-3)^2
(-3)^2 + (-4)^2
(0)^2 + (-5)^2
(3)^2 + (-4)^2
(4)^2 + (-3)^2
Hier sind die Werte bis zu n=25
. Achten Sie darauf, dass Ihr Code funktioniert n=0
.
0 1
1 4
2 4
3 0
4 4
5 8
6 0
7 0
8 4
9 4
10 8
11 0
12 0
13 8
14 0
15 0
16 4
17 8
18 4
19 0
20 8
21 0
22 0
23 0
24 0
25 12
Hier sind die Werte bis n=100
als Liste aufgeführt.
[1, 4, 4, 0, 4, 8, 0, 0, 4, 4, 8, 0, 0, 8, 0, 0, 4, 8, 4, 0, 8, 0, 0, 0, 0, 12, 8, 0, 0, 8, 0, 0, 4, 0, 8, 0, 4, 8, 0, 0, 8, 8, 0, 0, 0, 8, 0, 0, 0, 4, 12, 0, 8, 8, 0, 0, 0, 0, 8, 0, 0, 8, 0, 0, 4, 16, 0, 0, 8, 0, 0, 0, 4, 8, 8, 0, 0, 0, 0, 0, 8, 4, 8, 0, 0, 16, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 4, 0, 12]
Wissenswertes: Die Sequenz enthält Begriffe, die willkürlich hoch sind, und die Grenze ihres laufenden Durchschnitts ist π.
Bestenliste:
var QUESTION_ID=64812,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/64812/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
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>
1,0,2,0,0,3,0,0,0,4,0,0,0,0,5,...
. Wenn die Sequenz nach einer Zahl ungleich Null abgeschnitten wird, ist der bisherige Durchschnitt 1. Und die Läufe von Nullen haben später in der Sequenz immer weniger Einfluss.Antworten:
Python (
59 5756 Bytes)Online-Demo
Wie bei meiner CJam-Antwort wird die Möbius-Inversion verwendet und in pseudoquasilinearer Zeit ausgeführt.
Dank Sp3000 für die Einsparungen von 2 Byte und feersum für 1 Byte .
quelle
-1**x
immer so war-1
. Ich habe erwartet-1
, dass es sich bei dem Zeichen um ein einzelnes Ganzzahl-Literal handelt und nicht um ein unäres Minus mit niedriger Priorität, gefolgt von einer Eins.**x
.Mathematica, 13 Bytes
Wenn eingebaute Funktionen zulässig sind, geschieht dies in Mathematica.
Für 0 <= n <= 100
quelle
Python 2, 44 Bytes
Dies ist fast dasselbe wie die Lösung von xsot (die auf der Lösung von Peter Taylor basiert ), spart jedoch 8 Byte, indem die Art und Weise vereinfacht wird, wie Zeichen behandelt werden.
Beachten Sie, dass wir für ein vollständiges Programm 2 Bytes in der Funktion einsparen können, ohne dass Kosten außerhalb der Funktion anfallen:
Zwei zusätzliche Bytes für ein volles Programm auf diese Weise:
Denn
n > 0
es gibt eine gut lesbare 40-Byte-Lösung:quelle
Pyth, 13 Bytes
Testsuite
quelle
Q
.J, 16 Bytes
Dies ist ein monadisches Verb (mit anderen Worten eine unäre Funktion). Probieren Sie es online aus oder sehen Sie, ob alle Testfälle bestanden wurden .
Erläuterung
quelle
Python 2,
69555352 BytesDies ist eine rekursive Funktion, die auf der exzellenten Lösung von Peter Taylor basiert .
quelle
f=lambda n,x=1:+(x>n)or(n%x<1)-f(n,x+2)/4<<2
. Außerdem ist es uns wohl egal, ob die standardmäßige maximale Rekursionstiefe überschritten wird./4<<2
Trick macht es kürzer als das, was ich hatte.Julia, 40 Bytes
Ungolfed:
Beachten Sie, dass die Schleife nicht enthält
i==0
, da, wennn
es sich um ein Quadrat handelt, dieses bereits von eingeschlosseni=sqrt(n)
ist und es für dieses Formular nur vier und keine acht gibt (0^2+k^2, 0^2+(-k)^2, k^2+0^2, (-k)^2+0^2
).quelle
CJam,
2523 BytesDies ist eine theoretische Lösung, die O (9 n benötigt ) Zeit und Speicher für die Eingabe von n benötigt .
Auf Kosten eines zusätzlichen Bytes - für insgesamt 24 Bytes - können wir die Komplexität auf O (n 2 reduzieren ) :
Probieren Sie es online!
Wie es funktioniert
Entweder
oder
Dann
quelle
CJam (
25 24 2221 Bytes)Online-Demo
Dieser läuft in pseudoquasilinearer Zeit * und verwendet die Anweisung des OEIS that
Die Eingabe
0
ist offensichtlich ein Sonderfall (Möbius-Transformationen und -Vernichter passen nicht gut zusammen), hat jedoch nur ein Zeichen gekostet.* Pseudo- weil es im Wert der Eingabe quasilinear ist, nicht in der Größe der Eingabe; quasi, weil es
Theta(n)
Operationen mit ganzen Zahlen in der Größenordnung von ausführtn
; Eineb
-bit-Mod-Operation sollte einige Zeit in Anspruch nehmenb lg b
, daher dauert dies insgesamt einigeTheta(n lg n lg lg n)
Zeit.quelle
Japt ,
423733 BytesJapt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher
Wie es funktioniert
Vielleicht gibt es eine bessere Technik; Vorschläge sind willkommen.
quelle
Python 3,
686160 BytesDie Verwendung von zwei verschachtelten Listenverständnissen ist zu teuer. Stattdessen wird geprüft, ob beide Koordinaten auf dem Kreis mit dem Radius sqrt (n) Ganzzahlen sind.
Peter Taylor hat dies mit einem Moebius-Inversion-basierten Ansatz geschlagen .
quelle
n=0
elegant auflösen .Oktave, 28 Bytes
quelle
Haskell, 42 Bytes
Anwendungsbeispiel:
quelle
q
ist klug, eine Wache einzubinden, ich werde mich an diesen Trick erinnern.Julia,
897963 BytesDies ist eine benannte Funktion,
a
die eine Ganzzahl akzeptiert und einen Gleitkommawert zurückgibt. Es ruft eine Hilfsfunktion aufg
.Ungolfed:
Bei diesem Ansatz wird eine Vereinfachung der in OEIS aufgeführten Formel von Wesley Ivan Hurt verwendet. Die Vereinfachung wurde von Glen O, der gleichen Person, die 26 Bytes dieser Antwort rasiert hat, gefunden!
quelle
x^.5
stattsqrt(x)
3 Bytes zu speichern. Und(n==0)
spart 2 Bytes mehr1÷(n+1)
. Und Sie können 4 weitere Zeichen speichern, indem Siecos(π*sqrt(x))^2÷1
anstatt verwendenfloor(cos(π*sqrt(x))^2)
. Verwenden Sie auch1:n/2
lieber als1:n÷2
, da die Verwendung eines Float-Ins keinen Schaden anrichtetg(x)
und esi
ohnehin für die ganzen Zahlen gesperrt wird. Undsum(i->g(i)g(n-i),1:n/2)
wird auch noch ein paar Charaktere rasieren.sum
Trick schlägt jedoch fehln=0
, sodass ich das Array-Verständnis beibehalten habe.i=0
Fall in der Summe passieren lassen , können Sie das Zeichen einschalten4g(n)
. Also(n==0)-4g(n)-4g(n/2)+8sum(i->g(i)g(n-i),0:n/2)
, was wird nicht in den Fehler laufen. Aber Sie können es noch besser machen, indem Sie die Symmetrien notieren -(n==0)+4sum([g(i)g(n-i)for i=1:n])
Pyth,
1615 BytesVersuchen Sie es online im Pyth-Compiler .
Wie es funktioniert
quelle
TI-BASIC, 23 Bytes
Ziemlich einfach.
Σ(
ist Summation.Seltsamerweise
sum(seq(sum(seq(
wirft einERR:ILLEGAL NEST
, und tut es auchΣ(Σ(
, ist abersum(seq(Σ(
in Ordnung. Ich entschied mich fürΣ(
die Innenseite, um ein enges Verhältnis zu wahren.quelle
sum
undΣ
?X²+Y²=Ans
Werte von X zwischen-Ans
undAns
. sum (ist die Summe einer Liste. Daher müssen wir die Liste zuerst mit seq (..., Y, -Ans, AnsJavaScript (ES6),
6660 Bytes6 Bytes gespart dank @ edc65 !
Erläuterung
Prüfung
quelle
n=>eval('for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n')
eval
, diefor
Schleifen in eine Pfeilfunktion ohne Klammern zu setzen. Ich habe auch den~
Operator vergessen haha.Python 3,
936269 BytesItertools funktionierte nicht, also habe ich wieder zwei Bereiche verwendet, aber den Bereich herausgezogen, um Bytes zu sparen.
Bearbeiten: Vorheriger Code hat nicht wirklich funktioniert, da ich einen Bereich über n definiert habe, bevor ich n definiert habe.
quelle
APL,
232019 BytesErläuterung:
Abgesehen von der Tatsache, dass APL keine J's hat
i:
(Zahlen von -n bis n) hat, funktioniert dies ziemlich ähnlich wie die J-Antwort.Wir können keinen Zug benutzen, weil wir das
-\⍳2×⍵
nicht analysieren wollen(-\) ⍳ (2×⍵)
drei Bytes kosten würde; Ähnliches gilt für andere Atops. Alle diese Klammern verkürzen die reguläre Funktion.Probieren Sie es hier aus . Die Ausgabe von
1
bedeutet, dass alle Werte übereinstimmen.quelle
Matlab 41 Bytes
Noch kleiner als die vorherigen Antworten
Grundsätzlich wurde die Antwort von Agawa001 durch power und sqrt ersetzt
quelle
Süßigkeiten ,
1714 BytesDie Eingabe wurde zunächst auf den Stapel geschoben
~TbAT1C(sWs+Aeh)Z
~T0C(sWs+Aeh)Z
quelle
CJam, 28
Nicht wirklich kurz, aber effizient. ZB ist das Ergebnis für 15625 sofort 28. Verwendet die auf Faktorisierung basierende Formel von OEIS.
Probieren Sie es online aus
Erläuterung:
Einige Details zur Berechnung:
(exponent + 1) & -1
, was istexponent + 1
(exponent + 1) & 1
0, wenn der Exponent ungerade ist, und 1, wenn geradeAlle diese Werte multipliziert und multipliziert mit 4 sind genau die OEIS-Formel.
quelle
Python 2, 68 Bytes
Definiert eine aufgerufene Funktion
x()
, die eine Nummer n annimmt.Probieren Sie es online aus. http://ideone.com/aRoxGF
quelle
print
oderreturn
Aussage.n=0
und zu liefernn=1
(0 und 2 statt 1 und 4). Möglicherweise müssen die Bereichsgrenzen angepasst werden?n+1
.Pyth,
4135333027 BytesProbieren Sie es online aus.
Edit: Dank isaacg habe ich bekommen
m
und*F
zu arbeiten! JA!Bearbeiten: Setzen Sie die bitweise und wieder für mehr Byte-Einsparungen! Außerdem habe ich alles "Früher" entfernt. Es wurde langsam unübersichtlich.
Dank an Aditsu und seine CJam-Lösung und an Malzsen und seine Tipps (Eines Tages werde ich
m*Fd
zur Arbeit gehen. Eines Tages ...)Beachten Sie, dass,
Wenn die Primzahl 1 mod 4 ist, bekommen wir
-1 & (exponent + 1)
, was istexponent + 1
aber wenn die Primzahl 3 mod 4 ist, erhalten wir
1 & (exponent + 1)
,0
wenn der Exponent ungerade und1
wenn gerade istMultiplizieren Sie alles (zu Beginn mit 4), und Sie erhalten die Summe von zwei Quadraten, die sich zu unserer Eingabe addieren.
quelle
Python, 57 Bytes
Schöne Herausforderung. Leider werde ich es im Moment nicht kürzer.
quelle
PARI / GP,
3428 BytesGenerierungsfunktionen verwenden:
6 Bytes gespart dank Mitch Schwartz .
Mit eingebauten 33 Bytes (dank Mitch Schwartz 1 Byte gespart ):
quelle
matid(2)
Speichert ein Byte.n->sum(i=-n,n,x^i^2)^2\x^n%x
Matlab, 72 Bytes
quelle
disp
in dieser Herausforderung nicht Luis! =)Matlab,
6350 BytesDies schlägt den anderen gleichberechtigten Code, also sage ich es: D.
Das Programm ermittelt die positiven ganzzahligen Lösungen und multipliziert sie mit 4, um negative Lösungen einzuschließen.
Es können alle 25 ersten Testfälle durchgeführt werden
quelle
disp
du bei dieser Herausforderung nicht ! =)format compact
=)JavaScript, 89 Bytes
Ich weiß, dass dies nicht die kürzeste JavaScript-Antwort ist, selbst wenn ich die E / A-Zeilen entfernen würde, aber ich denke, es ist die am besten funktionierende JS-Antwort, die mir das Ergebnis für eine Million innerhalb weniger Sekunden liefert (zehn Millionen haben ungefähr eine Sekunde gedauert) Minute).
quelle
PHP, 70 Bytes, nicht konkurrierend
Algorithmus aus einer der Python-Antworten gestohlen ... Ich habe vergessen, welche; wollte zumindest teilweise verstehen was passiert bevor ich gepostet habe.
quelle
for(;$x<=$n=$argv[1];)$s+=(-($n%(2*$x+1)<1))**$x++*4;echo$n?$s:1;
spart 5 Bytes.$x-~$x
ist gleich2*$x+1
und Sie können jetzt beginnen, ohne die Variable zuzuweisen.