Berechnen Sie den Wert von

16

Herausforderung

Wenn eine ganze Zahl angegeben wird, gibt als Eingabe, bei der s 1 ist, den Wert von ζ ( s ) aus (wobei ζ ( x ) die Riemannsche Zetafunktion darstellt ).ss1ζ(s)ζ(x)

Weitere Informationen

ist definiert als:ζ(s)

ζ(s)=n=11ns

Sie sollten Ihre Antwort auf 5 Dezimalstellen ausgeben (nicht mehr und nicht weniger). Wenn die Antwort unendlich ist, sollten Sie oder ein gleichwertiges Ergebnis in Ihrer Sprache ausgeben .

Riemann Zeta-Einbauten sind erlaubt, aber es macht weniger Spaß, es so zu machen;)

Beispiele

Die Ausgänge müssen genau wie unten gezeigt sein

Input -> Output
1 -> ∞ or inf etc.
2 -> 1.64493
3 -> 1.20206
4 -> 1.08232
8 -> 1.00408
19 -> 1.00000

Kopfgeld

Als Trost für das Zulassen von eingebauten Funktionen werde ich eine 100-Wiederholungs-Prämie für die kürzeste Antwort anbieten, die keine eingebauten Zeta-Funktionen verwendet. (Das grüne Häkchen zeigt immer noch die kürzeste Lösung an.)

Gewinnen

Der kürzeste Code in Bytes gewinnt.

Beta-Zerfall
quelle
7
Diese Herausforderung hatte ein solches Potenzial ... Bis Sie Buildins zugelassen haben ...
HyperNeutrino
@HyperNeutrino Ja, ich habe gepostet, weil ich gesehen habe, dass die Herausforderung Builtins zulässt. FGITW
NoOneIsHere
2
Ist "auf 5 Nachkommastellen genau" streng? (Können wir also präziser ausgeben?) Wenn nicht, sollten die Testfälle wirklich 6dp anzeigen.
Jonathan Allan
@JonathanAllen Ich habe die Rundungsspezifikation
Beta-Zerfall
3
@BetaDecay (seufz kein Ping) soll eine Eingabe von 19 wirklich den Text ausgeben 1.00000? Wäre 1oder wäre 1.0nicht gültig? Sie haben es anscheinend zu einer Chamäleon-Herausforderung gemacht.
Jonathan Allan

Antworten:

11

Mathematica, 9 7 11 Bytes

Zeta@#~N~6&

Erläuterung:

Zeta@#       (* Zeta performed on input *)
      ~N     (* Piped into the N function *)
        ~6   (* With 6 digits (5 decimals) *)
          &  (* Make into function *)

Mathematica-Ergebnis

Ohne eingebaut:

Mathematica, 23 UTF-8 Bytes

Sum[1/n^#,{n,∞}]~N~6&

Vielen Dank an Kelly Lowder

Niemand ist hier
quelle
3
N@*Zetaspart zwei Bytes.
Martin Ender
@*ist der (linke) Kompositionsoperator: f@*gbezeichnet eine Funktion, deren Wert am Argument xist f[g[x]].
Greg Martin
@BetaDecay Gibt 1dafür aus ComplexInfinityund rundet auf 5Stellen. (zB 1.64493)
NoOneIsHere
@MartinEnder Wie funktioniert das *?
NoOneIsHere
1
@NoOneIsHere Ihre Antwort verwendet, N~5aber Ihre Erklärung verwendet 6.
numbermaniac
8

Javascript, 81 70 66 65 Bytes

s=>s-1?new Int8Array(1e6).reduce((a,b,i)=>a+i**-s).toFixed(5):1/0

Lauffähige Beispiele:

ζ=s=>s-1?new Int8Array(1e6).reduce((a,b,i)=>a+i**-s).toFixed(5):1/0

const values = [ 1, 2, 3, 4, 8, 19 ];
document.write('<pre>');
for(let s of values) {
  document.write('ζ(' + s + ') = ' + ζ(s) + '\n')
}

Frxstrem
quelle
Warum es Z nennen? Das Zeta-Symbol ist in JS ein gültiger Funktionsname und muss nicht zum Golfen verwendet werden.
Fund Monica's Lawsuit
Ersetzen Sie Array(1e6).fill()durch [...Array(1e6)]und ersetzen Sie die erste (s)durchs
Conor O'Brien
1
@ QPaysTaxes Guter Punkt! Unicode-Variablennamen ftw!
Frxstrem
@ ConorO'Brien Huh, ich habe diesen Array-Trick nie bemerkt (ich dachte, dass spärliche Arrays nicht iterieren, aber ich denke, ich habe mich geirrt). Vielen Dank!
Frxstrem
@Frxstrem Beachten Sie, dass ζ zwei Bytes dauert
CocoaBean
6

APL (Dyalog) , 22 21 Bytes

Schau ma, keine eingebauten! -1 danke an ngn.

Da Dyalog APL nicht unendlich ist, verwende ich Iversons vorgeschlagene Notation .

{1=⍵:'¯'5⍕+/÷⍵*⍨⍳!9}

Probieren Sie es online!

{ anonyme Funktion:

1=⍵: Wenn das Argument eins ist, dann:

  '¯' Gib einen Macron zurück

 sonst

  !9 Fakultät von neun (362880)

   zuerst , dass viele Zahlen i ntegers

  ⍵*⍨ erheben sie die Macht des Arguments

  ÷ gegenseitige Werte

  +/ Summe

  5⍕ Format mit fünf Dezimalstellen

} [Ende der anonymen Funktion]

Adam
quelle
1
1E6-> !9
ngn
@ngn Danke.
Adám
5

C 74 70 69 Bytes

n;f(s){double z=n=0;for(;++n>0;)z+=pow(n,-s);printf("%.5f",z/=s!=1);}

Kompilieren mit -fwrapv. Es wird einige Zeit dauern, um eine Ausgabe zu erstellen.

Sehen Sie , wie es hier funktioniert . Das Teil ++n>0wird durch ersetzt ++n<999999, sodass Sie nicht warten müssen. Dadurch bleiben Funktionalität und Ausgabe identisch.

2501
quelle
Does floatArbeit?
14.
5

TI-Basic, 16 Bytes (keine eingebauten)

Fix 5:Σ(X^~Ans,X,1,99
Timtech
quelle
Sie müssen wirklich auf ungefähr 150000 aufsteigen, um die richtige Antwort für Ans = 2 zu erhalten. Die Berechnung auf einem 84 Plus CE würde über eine halbe Stunde dauern. Sie können auch irgendwo mit (Ans-1) ^ 0 multiplizieren, um einen Fehler für Ans = 1 zu erhalten, TI-Basics engste Darstellung der Unendlichkeit!
Pizzapants184
@ pizzapants184 Mir ist voll bewusst, dass 2, 3 usw. mehr als 99 Iterationen dauern können. Sie können diese Funktionalität erreichen durch den Austausch 99mit E9dem E die wissenschaftliche E, also 10 ^ 9 darstellt. (Oder offensichtlich etwas kleineres wie E5). Das Verständnis, dass E99 im Allgemeinen für positive Unendlichkeit verwendet wird, ermöglicht diese Funktionalität theoretisch auch dann, wenn die obere Grenze der Summation war E99. Emulatoren können dies viel schneller als ein physikalischer Rechner bereitstellen. Vielen Dank für Ihre Gedanken :)
Timtech
Ich denke nicht, dass dies als Unendlichkeit gilt. Es wird nicht einmal ein Fehler ausgegeben, wenn Sie aufgrund der Gleitkomma-Ungenauigkeit 1 unendlich addieren.
Lirtosiast
4

C (GCC) , 112 101 94 84 Bytes

Vielen Dank für die Golftipps von ceilingcat.

n;f(s){float r;for(n=98;n;r+=pow(n--,-s));printf("%.5f",r+pow(99,-s)*(.5+99./--s));}

Probieren Sie es online!

Cleblanc
quelle
1
Die Frage wurde bearbeitet. Sie können in der Sprache native Unendlich-Symbole ausgeben.
2501
@ 2501 Ich habe auf die vorherige Antwort zurückgegriffen, obwohl ich noch einige Bytes von Ihrer Lösung entfernt bin.
Cleblanc
@ceilingcat f(1)scheint nicht korrekt zu sein.
Cleblanc
83 Bytes
Ceilingcat
3

Julia , 36 Bytes

x->x!=1?@sprintf("%.5f",zeta(x)):Inf
Uriel
quelle
2

MATL , 21 Bytes

q?'%.5f'2e5:G_^sYD}YY

Probieren Sie es online!

Erläuterung

Der Eingang 1ist speziell für den Ausgang ausgelegtinf . Auf diese Weise zeigt MATL Unendlich an.

Für andere Eingaben als das 1Summieren der ersten 2e5Terme reicht es aus, um eine Genauigkeit von 5 Dezimalstellen zu erzielen. Der Grund dafür ist, dass bei direkter Berechnung diese Anzahl von Begriffen für die Eingabe ausreicht 2und bei größeren Exponenten der Endpunkt der Reihe kleiner ist.

q         % Input (implicit) minus 1
?         % If non-zero
  '%.5f'  %   Push string: format specifier
  2e5:    %   Push [1 2 ... 2e5]
  G       %   Push input again
  _       %   Negate
  ^       %   Power. element-wise
  s       %   Sum of array
  YD      %   Format string with sprintf
}         % Else
YY        %   Push infinity
          % End (implicit)
          % Display (implicit)
Luis Mendo
quelle
2

R, 54 Bytes

function(a){round(ifelse(a==1,Inf,sum((1:9^6)^-a)),5)}

Findet die Summe direkt und formatiert sie wie gewünscht und gibt sie aus, Infwenn a gleich 1 ist. Eine Summierung auf 9^6scheint ausreichend zu sein, um eine Genauigkeit von fünf Stellen zu erhalten, während sie noch testbar ist. 9^9würde eine bessere Genauigkeit bei gleicher Codelänge erzielen. Ich könnte das kürzer machen, wenn R einen richtigen ternären Operator hätte.

Michael Lugo
quelle
1
function(a)round("if"(a-1,sum((1:9^6)^-a)),5)ist ein paar Bytes kürzer.
Giuseppe
Ja, aber es wird ein Fehler ausgegeben, wenn a = 1 function(a)round("if"(a-1,sum((1:9^6)^-a),Inf),5)funktioniert und immer noch kürzer als meine ursprüngliche Lösung ist.
Michael Lugo
Oh ja natürlich! Ich habe vergessen, das einzuschließen, das Infbekomme ich, wenn ich Code direkt in das Kommentarfeld eingebe ...
Giuseppe
2

C 129 130 128 Bytes

#include<math.h>
f(s,n){double r=0;for(n=1;n<999;++n)r+=(n&1?1:-1)*pow(n,-s);s-1?printf("%.5f\n",r/(1-pow(2,1-s))):puts("oo");}

Es wird die folgende Formel verwendet

\ zeta (s) = \ frac {1} {1-2 ^ {1-s}} \ sum \ limits_ {n = 1} ^ {\ infty} {\ frac {(- 1) ^ {n + 1} } {n ^ s}}

Test und Ergebnisse

main(){f(2,0);f(1,0);f(3,0);f(4,0);f(8,0);f(19,0);}

1.64493
+oo
1.20206
1.08232
1.00408
1.00000
RosLuP
quelle
Warum diese Gleichung statt Σ(1/(n^s))? Es scheint viel komplizierter zu sein ...
Beta-Zerfall
@BetaDecay weil es mir schneller vorkommt das Ergebnis zu finden; Hier gibt es den Bereich für Summen in 1..999, in der 'Σ (1 / (n ^ s))' gibt es Bedürfnisse im Bereich 1..10 ^ 6
RosLuP
1
Aha. Zu ooIhrer Information, es ist einfach in Ordnung, Sie müssen es nicht als positiv angeben
Beta Decay
1
85 Bytes
Ceilingcat
@ceilingcat Sie können einen anderen Eintrag für diese Frage schreiben ... es scheint, ich erinnere mich hier ohne math.h Header es nicht zu verlinken ...
RosLuP
2

Python 3: 67 Bytes (keine eingebauten)

f=lambda a:"∞"if a<2else"%.5f"%sum([m**-a for m in range(1,10**6)])

Nichts Besonderes, verwendet nur Python aufgrund der impliziten utf-8-Codierung 3 .

Probieren Sie es online mit Testfällen.

Chris H
quelle
1

Perl 6 , 50 Bytes

{$_-1??(1..1e6).map(* **-$_).sum.fmt('%.5f')!!∞}
Sean
quelle
1

PARI / GP, 27 26 Bytes

\p 6
s->trap(,inf,zeta(s))
Alephalpha
quelle
1

Jelly , 23 Bytes

ȷ6Rİ*⁸S÷Ị¬$ær5;ḷỊ?”0ẋ4¤

Probieren Sie es online!

Wie?

  • Summiert die ersten Millionen Begriffe
  • Dividiert durch , 0wenn abs(input)<=1zu erhalten inf(statt 14.392726722864989) für1
  • Rundet auf 5 Dezimalstellen
  • Fügt vier Nullen hinzu, wenn abs(result)<=1der 1.0as formatiert werden soll1.00000
  • Druckt das Ergebnis

ȷ6Rİ*⁸S÷Ị¬$ær5;ḷỊ?”0ẋ4¤ - Main link: s
ȷ6                      - literal one million
  R                     - range: [1,2,...,1000000]
   İ                    - inverse (vectorises)
     ⁸                  - link's left argument, s
    *                   - exponentiate
      S                 - sum
          $             - last two links as a monad:
        Ị               -   insignificant? (absolute value of s less than or equal to 1?)
         ¬              -   not (0 when s=1, 1 when s>1)
       ÷                - divide (yielding inf when s=1, no effect when s>1)
           ær5          - round to 10^-5
                      ¤ - nilad followed by link(s) as a nilad:
                  ”0    -   literal '0'
                    ẋ4  -   repeated four times
                Ị?      - if insignificant (absolute value less than or equal to 1?)
              ;         -       concatenate the "0000" (which displays as "1.00000")
               ḷ        - else: left argument
                        - implicit print
Jonathan Allan
quelle
1

Python 3 + SciPy, 52 Bytes

lambda n:'%.5f'%zeta(n,1)
from scipy.special import*

Probieren Sie es online!

total menschlich
quelle
1
Geht diese Ausgabe für die Eingabe 1?
ETHproductions
1
Ist dies auch eine Rundung auf fünf Dezimalstellen?
Betazerfall
1
@ETHproductions Gibt aus, infwas erlaubt ist.
totalhuman
Super spät, konnte aber nicht nur Sie verwenden zetac(n)statt zeta(n,1)?
NoOneIsHere
0

Gelee , 26 Bytes

⁵*5İH+µŒṘḣ7
⁴!Rİ*³Sǵ’ݵ’?

Versuchen Sie es nicht online mit diesem Link! (Da hier 16! ~ 20 Billionen Terme verwendet werden, führt die Ausführung auf TIO zu einem MemoryError.)

Probieren Sie es online aus stattdessen mit diesem Link. (Verwendet stattdessen 1 Million Begriffe. Viel besser zu handhaben, benötigt aber ein weiteres Byte.)

Gibt inffür Eingabe 1 zurück.

Erläuterung

⁵*5İH+µŒṘḣ7    - format the output number
⁵*5İH+         - add 0.000005
      µŒṘ      - get a string representation
         ḣ7    - trim after the fifth decimal.

⁴!Rİ*³Sǵ’ݵ’? - main link, input s
           µ’? - if input minus 1 is not 0...
⁴!R            -   [1,2,3,...,16!] provides enough terms.
   İ           -   take the inverse of each term
    *³         -   raise each term to the power of s
      S        -   sum all terms
       Ç       -   format with the above link
               - else:
        µ’İ    -   return the reciprocal of the input minus 1 (evaluates to inf)

Von den 26 Bytes werden 7 zur Berechnung verwendet, 12 zur Formatierung und 7 zur Erzeugung infvon Null. Dafür muss es ein besseres Golf geben.

fireflame241
quelle
ȷ6ist ein Zahlenwörtchen von einer Million, das die Problemumgehung um die Fakultät beseitigt.
Jonathan Allan
0

MathGolf , 14 Bytes (keine eingebauten)

┴¿Å'∞{◄╒▬∩Σ░7<

Beachten Sie, dass in dem TIO Link habe ich ersetzt für , die geschoben106 Anstatt von 107. Dies liegt daran, dass die hier eingereichte Version für alle Testfälle Zeitüberschreitungen aufweist. Dies führt dazu, dass die Antworten für 3 und 8 um 1 Dezimalstelle abweichen. In MathGolf gibt es jedoch viel größere numerische 1-Byte-Literale, die eine beliebige Dezimalgenauigkeit zulassen.

Probieren Sie es online!

Erläuterung

┴                check if equal to 1
 ¿               if/else (uses one of the next two characters/blocks in the code)
  Å              start block of length 2
   '∞            push single character "∞"
     {           start block or arbitrary length
      ◄          push 10000000
       ╒         range(1,n+1)
        ▬        pop a, b : push(b**a)
         ∩       pop a : push 1/a (implicit map)
          Σ      sum(list), digit sum(int)
           ░     convert to string (implicit map)
            7    push 7
             <   pop(a, b), push(a<b), slicing for lists/strings
maxb
quelle