Tính giá trị của


16

Thử thách

Với một số nguyên, , như là đầu vào nơi s 1 đầu ra giá trị của ζ ( s ) (Nơi ζ ( x ) đại diện cho hàm Riemann Zeta ).ss1ζ(s)ζ(x)

Thêm thông tin

được định nghĩa là:ζ(s)

ζ(s)=n=11ns

Bạn nên xuất câu trả lời của mình đến 5 chữ số thập phân (không hơn, không kém). Nếu câu trả lời đi ra được vô cực, bạn nên đầu ra hoặc tương đương trong ngôn ngữ của bạn.

Riemann Zeta tích hợp được cho phép, nhưng sẽ ít thú vị hơn khi làm theo cách đó;)

Ví dụ

Đầu ra phải chính xác như dưới đây

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

Tiền thưởng

Vì sự an ủi khi cho phép tích hợp sẵn, tôi sẽ cung cấp tiền thưởng 100 lần cho câu trả lời ngắn nhất không sử dụng các hàm zeta tích hợp. (Dấu kiểm màu xanh lá cây vẫn sẽ đi đến giải pháp ngắn nhất nói chung)

Chiến thắng

Mã ngắn nhất tính bằng byte thắng.


7
Thử thách này có tiềm năng như vậy ... Cho đến khi bạn cho phép xây dựng ...
HyperNeutrino

@HyperNeutrino Yep, tôi đã đăng vì tôi thấy thử thách được phép xây dựng. FGITW
NoOneIsHãy là

2
Là "chính xác đến 5 chữ số thập phân" có nghiêm ngặt không? (tức là chúng ta có thể xuất ra độ chính xác cao hơn không?) Nếu không phải là trường hợp thử nghiệm sẽ hiển thị 6dp thực sự.
Jonathan Allan

@Jonathan ALLen Tôi đã xóa thông số làm tròn
Beta Decay

3
@BetaDecay (thở dài không ping) một đầu vào 19 thực sự xuất văn bản 1.00000? Sẽ không 1hoặc 1.0có giá trị? Có vẻ như bạn đã biến nó thành một thử thách tắc kè hoa.
Jonathan Allan

Câu trả lời:


11

Toán học, 9 7 11 byte

Zeta@#~N~6&

Giải trình:

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

Kết quả toán học

Không có nội dung:

Toán học, 23 byte UTF-8

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

Cảm ơn Kelly Lowder


3
N@*Zetatiết kiệm hai byte.
Martin Ender

@*là toán tử thành phần (bên trái): f@*gbiểu thị một hàm có giá trị tại đối số xf[g[x]].
Greg Martin

@BetaDecay Cho 1nó xuất ra ComplexInfinity, và nó làm tròn đến các 5vị trí. (ví dụ 1.64493)
NoOneIsHãy là

@MartinEnder *Công việc thế nào?
NoOneIsHãy là

1
@NoOneIsCó câu trả lời của bạn sử dụng N~5nhưng giải thích của bạn sử dụng 6.
numbermaniac

8

Javascript, 81 70 66 65 byte

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

Ví dụ có thể chạy được:

ζ=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')
}


Tại sao gọi nó là Z? Biểu tượng zeta là một tên hàm hợp lệ trong JS và bạn không cần phải chơi nó.
Vụ kiện của Quỹ Monica

Thay thế Array(1e6).fill()bằng [...Array(1e6)]và thay thế cái đầu tiên (s)bằngs
Conor O'Brien

1
@QPaysTaxes Điểm tốt! Tên biến Unicode ftw!
Frxstrem

@ ConorO'Brien Huh, tôi chưa bao giờ nhận ra rằng trò lừa Array (Tôi nghĩ rằng các mảng thưa thớt không lặp lại nhưng tôi đoán rằng tôi đã sai). Cảm ơn!
Frxstrem

@Frxstrem Lưu ý rằng mất hai byte
Cốc Cốc

6

APL (Dyalog) , 22 21 byte

Nhìn ma, không có tích hợp! -1 cảm ơn ngn.

Vì Dyalog APL không có vô số, tôi sử dụng ký hiệu đề xuất của Iverson .

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

Hãy thử trực tuyến!

{ chức năng ẩn danh:

1=⍵: nếu đối số là một, thì:

  '¯' trả lại một macron

 khác

  !9 giai thừa của chín (362880)

   đầu tiên là nhiều số nguyên i ntegers

  ⍵*⍨ nâng chúng lên thành sức mạnh của cuộc tranh luận

  ÷ giá trị đối ứng

  +/ Tổng

  5⍕ định dạng với năm số thập phân

} [kết thúc chức năng ẩn danh]


1
1E6-> !9
ngn 19/12/18

@ngn Cảm ơn bạn.
Adám

5

C, 74 70 69 byte

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

Biên dịch với -fwrapv. Nó sẽ mất một thời gian để sản xuất một đầu ra.

Xem nó hoạt động ở đây . Phần ++n>0được thay thế bằng ++n<999999, vì vậy bạn không phải chờ đợi. Điều này giữ chức năng và đầu ra giống hệt nhau.


floathoạt động không?
l4m2

5

TI-Basic, 16 byte (không có nội dung)

Fix 5:Σ(X^~Ans,X,1,99

Bạn thực sự cần phải lên tới khoảng 150000 để có câu trả lời đúng cho Ans = 2, sẽ mất tới nửa giờ để tính toán trên 84 Plus CE. Ngoài ra, bạn có thể nhân với (Ans-1) ^ 0 ở đâu đó để nhận lỗi cho Ans = 1, đại diện gần nhất của TI-Basic!
pizzapants184

@ pizzapants184 Tôi hoàn toàn biết rằng 2, 3, v.v. có thể mất hơn 99 lần lặp. Bạn có thể đạt được chức năng này bằng cách thay thế 99bằng E9E là E khoa học, tức là đại diện cho 10 ^ 9. (Hoặc rõ ràng là một cái gì đó nhỏ hơn như E5). Hiểu rằng E99 thường được sử dụng cho vô cực tích cực cũng cho phép chức năng này về mặt lý thuyết, nếu giới hạn trên của tổng kết là E99. Trình giả lập có thể cung cấp điều này nhanh hơn nhiều so với một máy tính vật lý. Cảm ơn những suy nghĩ của bạn :)
Timtech

Tôi không nghĩ điều này được tính là hiển thị vô cùng. Nó thậm chí sẽ không gây ra lỗi nếu bạn thêm 1 vô hạn, do lỗi không chính xác.
lirtosiast

4

C (gcc) , 112 101 94 84 byte

Cảm ơn những lời khuyên chơi golf từ trần nhà.

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

Hãy thử trực tuyến!


1
Câu hỏi đã được chỉnh sửa. Bạn có thể xuất ký hiệu ngôn ngữ vô cực bản địa.
2501

@ 2501 Tôi trở lại câu trả lời trước, mặc dù tôi vẫn còn khá xa giải pháp của bạn.
cleblanc

@ceilingcat f(1)có vẻ không đúng.
cleblanc



2

MATL , 21 byte

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

Hãy thử trực tuyến!

Giải trình

Đầu vào 1là đặc biệt cho đầu rainf , đó là cách MATL hiển thị vô cực.

Đối với các đầu vào khác 1, tổng các 2e5thuật ngữ đầu tiên đủ để đạt được độ chính xác là 5 chữ số thập phân. Lý do là, từ tính toán trực tiếp, số lượng thuật ngữ này đủ cho đầu vào 2và đối với số mũ lớn hơn, đuôi của chuỗi nhỏ hơn.

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)

2

R, 54 byte

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

Tìm tổng trực tiếp và các định dạng như mong muốn, đầu ra Infnếu a là 1. Tóm tắt để 9^6xuất hiện là đủ để có được độ chính xác năm vị trí trong khi vẫn có thể kiểm tra được; 9^9sẽ có được độ chính xác tốt hơn trong cùng độ dài của mã. Tôi có thể nhận được điều này ngắn hơn nếu R có một toán tử ternary thích hợp.


1
function(a)round("if"(a-1,sum((1:9^6)^-a)),5)là một vài byte ngắn hơn.
Giuseppe

Có, nhưng nó sẽ báo lỗi nếu a = 1. function(a)round("if"(a-1,sum((1:9^6)^-a),Inf),5)hoạt động và vẫn ngắn hơn giải pháp ban đầu của tôi.
Michael Lugo

Ồ vâng tất nhiên rồi! Tôi đã quên bao gồm Inf, đó là những gì tôi nhận được khi nhập mã trực tiếp vào hộp bình luận ...
Giuseppe

2

C, 129 130 128 byte

#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");}

nó sử dụng công thức sau

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

kiểm tra và kết quả

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

Tại sao phương trình này thay vì Σ(1/(n^s))? Có vẻ phức tạp hơn nhiều ...
Beta Decay

@BetaDecay vì dường như với tôi nhanh hơn trong việc tìm kiếm kết quả; ở đây có phạm vi cho tổng s trong 1..999, trong 'Σ (1 / (n ^ s))' có nhu cầu s trong phạm vi 1..10 ^ 6
RosLuP

1
Tôi hiểu rồi. FYI, đơn giản oolà ổn, bạn không cần xác định nó là tích cực
Beta Decay


@ceilingcat bạn có thể viết một mục khác cho câu hỏi này ... có vẻ như tôi nhớ ở đây mà không có math.h tiêu đề nó không liên kết ...
RosLuP

2

Python 3: 67 byte (không tích hợp sẵn)

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

Không có gì lạ mắt, chỉ sử dụng python 3 vì mã hóa utf-8 ẩn.

Dùng thử trực tuyến với các trường hợp thử nghiệm.




1

Thạch , 23 byte

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

Hãy thử trực tuyến!

Làm sao?

  • Tổng cộng một triệu điều khoản đầu tiên
  • Chia theo 0thời gian abs(input)<=1để mang lại inf(chứ không phải 14.392726722864989) cho1
  • Làm tròn đến 5 chữ số thập phân
  • Nối bốn số không nếu abs(result)<=1định dạng 1.0như1.00000
  • In kết quả

ȷ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


0

Thạch , 26 byte

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

Đừng thử trực tuyến với liên kết này! (Vì việc này sử dụng 16! ~ 20 nghìn tỷ thuật ngữ, chạy trên TIO sẽ tạo ra MemoryError)

Thay vào đó hãy thử trực tuyến với liên kết này. (Sử dụng 1 triệu thuật ngữ thay thế. Dễ quản lý hơn nhưng mất thêm một byte)

Trả về infcho đầu vào 1.

Giải trình

⁵*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)

Trong số 26, byte, 7 được sử dụng để tính toán, 12 là định dạng và 7 là để tạo ra infsố không. Phải có một sân golf tốt hơn cho việc này.


ȷ6là một chữ số của một triệu, loại bỏ cách giải quyết giai thừa.
Jonathan Allan

0

MathGolf , 14 byte (không có nội dung)

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

Lưu ý rằng trong liên kết TIO, tôi đã thay thế cho , mà đẩy106 thay vì 107. Điều này là do phiên bản được gửi ở đây hết thời gian cho tất cả các trường hợp thử nghiệm. Điều này dẫn đến các câu trả lời cho 3 và 8 bị tắt bởi 1 chữ số thập phân. Tuy nhiên, có những chữ số 1 byte lớn hơn trong MathGolf, cho phép độ chính xác thập phân tùy ý.

Hãy thử trực tuyến!

Giải trình

┴                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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.