고조파 시퀀스의 부분 합!


13

정의

수학에서 고조파 시퀀스

고조파 시퀀스 방정식

즉, 시퀀스 의 n 번째 항은 n 의 역수와 같습니다 .


소개

이 문제에서 입력 으로 양의 정수 n 이 주어지면 고조파 시퀀스 의 첫 n 개의 항의 부분 합을 출력합니다 .


입력

언어가 지원하는 숫자 범위 내에서 양의 정수가 제공됩니다. 챌린지에는 양의 정수만 필요하므로 Signed 및 Unsigned (사용자에 따라 다름) 일 수 있습니다.

사전 정의 된 변수에 존재한다고 가정하는 것을 제외하고 어떤 방식 으로든 입력을 취할 수 있습니다. 파일, 터미널, 모달 창 ( prompt()JavaScript) 등에서 읽을 수 있습니다. 입력을 함수 인수로 취하는 것도 허용됩니다.


산출

프로그램은 5 개의 유효 숫자의 정밀도를 갖는 고조파 시퀀스 의 처음 n 개의 항의 합을 부동 소수점 (또는 출력이 1로 나눌 수있는 경우 정수)로 출력 해야합니다. 여기서 n 은 입력을 나타냅니다. 수학적 전문 용어로 동일한 내용을 전달하려면 다음을 계산해야합니다.

고조파 시퀀스 부분 처음 n 항의 합

여기서 n 은 입력을 나타냅니다.

출력을 변수에 쓰는 것을 제외하고 어떤 방식 으로든 출력 할 수 있습니다. 화면, 터미널, 파일, 모달 창 ( alert()JavaScript)에 쓰기 가능합니다. 기능 return값으로의 출력도 가능합니다.


추가 규칙


테스트 사례

테스트 사례는 입력이 1- 인덱싱 된 것으로 가정합니다.

Input     Output
1         1
2         1.5
3         1.8333
4         2.0833
5         2.2833

승리 기준

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


테스트 케이스를 제공해 주시겠습니까?
user41805

2
어떤 정밀도가 필요합니까? 정확한 출력은 일반적으로 분수로만 가능하지만, 많은 언어에서 분자와 분모에 대해 별도의 숫자 여야합니다. a) a float, b) a 분수 또는 정수 쌍 c)를 출력 할 수 있습니까?
레벨 리버 세인트

2
@Arjun 고조파 계열은 무한대로 커지므로 숫자가 수천 및 수백만에 도달하면 소수점 이하 10 자리를 맞추기가 어려워집니다. 소수점 이하 자릿수가 아닌 중요한 숫자를 사용하려고하므로 정확하게 계산할 필요는 없습니다. 5 개의 유효 숫자로 충분합니다. 그래서 9.9999E10이 아닌99999999999.9999999999
레벨 강 세인트

중요한 수치를 5 개 이상 볼 수 있습니까?
아웃 골퍼 에릭

그런데 고조파 시퀀스에는 초기 a_1 = 1 이외의 정수가 포함되지 않는 것으로 알려져 있습니다. n; 그런 다음 2 ^ k는 a_n의 분모를 나눕니다.)
Greg Martin

답변:



9

파이썬 3, 27 바이트

h=lambda n:n and 1/n+h(n-1)

0 인덱싱 또는 1 인덱싱?
Arjun

2
예외 RuntimeError기본적으로 재귀 한도보다 입력 큰 1000을 처리 할 때.
sagiksp

당신은 할 수 sys.setrecursionlimit(473755252663)있지만 스택은 결국 아주 쉽게 넘칠 것입니다
cat

@Arjun 그것은 1 색인입니다
shooqie

8

자바 스크립트, 19 18 바이트

@RickHitchcock 덕분에 1 바이트 절약

f=a=>a&&1/a+f(--a)

이것은 1 인덱스입니다.

f=a=>a&&1/a+f(--a)

for(i=0;++i<10;)console.log(f(i))


다른 게시물에서 본 내용 f=에서 2 바이트를 절약하기 위해 답변에서 제거 할 수 있습니다 .
Rick Hitchcock

1
@RickHitchcock f=함수가 재귀 적이므로 에서 자체를 참조하므로 제거 할 수 없습니다 f(--a). 그러나 이것이 재귀 솔루션이 아니라면 그렇게 할 수 있었을 것입니다.
user41805

아 이해가 되네요! 로 1 바이트를 저장하십시오 f=a=>a&&1/a+f(--a).
Rick Hitchcock

@RickHitchcock 멋진 사람!
user41805


6

Mathematica, 21 20 16 바이트

이 솔루션은 1- 색인입니다.

Sum[1./i,{i,#}]&

1 인덱싱
J42161217

1
> 내장을 사용하여 첫 n 개의 요소의 부분 합을 계산해서는 안됩니다. (예, 그것은 당신을위한 수학입니다!)
MCCCS

4
영업 이익은 내가 HarmonicNumber [#] 사용할 수 없음을 의미합니다
J42161217

4
그리고 더 짧아 질 수 Tr[1./Range@#]&있습니다.
Greg Martin

2
@Ian Mathematica는 5 sig fig를 표시 할 수 있지만이 함수 기계 정밀도 숫자 (52 개의 이진수 비트 또는 16 진수의 16 진수 미만)를 반환 합니다.
LLlAMnYP




5

Japt -x , 8 6 5 3 바이트

õpJ

ETH 프로덕션 덕분에

온라인으로 사용해보십시오


0 인덱싱 또는 1 인덱싱?
Arjun

나는 당신이 바이트를 절약 할 수 있다고 생각합니다õ x@1/X
ETHproductions

... 그리고 또 다른 부부는 사용하여 바이트 XpJ대신 1/X:-)
ETHproductions

고마워, @ETHproductions :) 내가 떠나 자마자 나는 나뭇 가지를 뭉쳤다.
얽히고 설킨

실제로 나는 _자동 기능으로 인해 당신이 필요하다고 생각하지 않습니다 . 나는 그 팁을 정말로 써야한다. : P (현충일이기 때문에 오늘이나 내일 시간이 있어야한다)
ETHproductions

4

CJam , 11 10 바이트

outgolfer Erik 덕분에 1 바이트 제거

ri),{W#+}*

1 기반 인덱싱을 사용합니다.

온라인으로 사용해보십시오!

설명

ri            e# Read integer, n
  )           e# Increment by 1: gives n+1
   ,          e# Range: gives [0 1 2 ... n]
    {   }*    e# Fold this block over the array
     W#       e# Inverse of a number
       +      e# Add two numbers

W대신 사용할 수 있습니다 -1.
Outgolfer Erik

@EriktheOutgolfer는 자신을 능가했다 :-)
Luis Mendo

@LuisMendo 저는 제 이름이 마음에 듭니다. 그냥 이름 일뿐입니다. 그리고 네, 동료 골퍼 골프를 더욱 돕고있는 과정에서 나 자신을 능가했습니다.
Outgolfer Erik

@Erik 그것은 농담이었습니다. 도움을 주셔서 감사합니다
Luis Mendo

3

하스켈, 20 바이트

f 0=0
f n=1/n+f(n-1)

원래 솔루션, 22 바이트

f n=sum[1/k|k<-[1..n]]

이 solutios는 1 색인 입력을 가정합니다.



3

Tcl 38 바이트

proc h x {expr $x?1./($x)+\[h $x-1]:0}

그것은 매우 더러운 해킹이며 재귀 호출은 0으로 평가 될 때까지 "5-1-1-1 ..."과 같은 리터럴 문자열을 전달합니다.


포맷 해 주셔서 감사합니다 @Christopher. 이를 통해 백 슬래시 복제가 더 이상 필요하지 않았습니다.
avl42

문제 없어요! 더 좋아 보인다
Christopher


2

MATL, 5 바이트

:l_^s

이 솔루션은 1 기반 인덱싱을 사용합니다.

MATL Online 에서 사용해보십시오

설명

    % Implicitly grab input (N)
:   % Create an array from [1...N]
l_^ % Raise all elements to the -1 power (take the inverse of each)
s   % Sum all values in the array and implicitly display the result

2

공리, 45 34 바이트

f(x:PI):Any==sum(1./n,n=1..x)::Any

1- 색인; 인수 하나의 양의 정수 (PI)를 가지며 sys가 다음 함수 arg에 유용한 유형으로 변환하거나 변환하지 않는 "Any"를 반환합니다 (마지막으로 아래 예제를 참조하십시오)

(25) -> [[i,f(i)] for i in 1..9]
   (25)
   [[1,1.0], [2,1.5], [3,1.8333333333 333333333], [4,2.0833333333 333333333],
    [5,2.2833333333 333333333], [6,2.45], [7,2.5928571428 571428572],
    [8,2.7178571428 571428572], [9,2.8289682539 682539683]]
                                                      Type: List List Any
(26) -> f(3000)
   (26)  8.5837498899 591871142
                                        Type: Union(Expression Float,...)
(27) -> f(300000)
   (27)  13.1887550852 056117
                                        Type: Union(Expression Float,...)
(29) -> f(45)^2
   (29)  19.3155689383 88117644
                                                   Type: Expression Float


1

C, 54 바이트

i;float f(n){float s;for(i=n+1;--i;s+=1./i);return s;}

1 인덱스 숫자를 사용합니다.



1

QBIC , 13 바이트

[:|c=c+1/a]?c

설명

[ |        FOR a = 1 to
 :            the input n
   c=c+    Add to c (starts off as 0)
   1/a     the reciprocal of the loop iterator
]          NEXT
?c         PRINT c

1

Gol> <> , 8 바이트

F1LP,+|B

온라인으로 사용해보십시오!

전체 프로그램 예 및 작동 방식

1AGIE;GN
F1LP,+|B

1AGIE;GN
1AG       Register row 1 as function G
   IE;    Take input as int, halt if EOF
      GN  Call G and print the result as number
          Repeat indefinitely

F1LP,+|B
F     |   Repeat n times...
 1LP,       Compute 1 / (loop counter + 1)
     +      Add
       B  Return



0

Braingolf, 20 바이트 [비경쟁]

VR1-1[1,!/M,$_1+]v&+

braingolf가 플로트를 사용할 수 없기 때문에 실제로 작동하지 않지만 논리는 정확합니다.

설명:

VR1-1[1,!/M,$_1+]v&+   Implicit input
VR                     Create new stack and return to main stack
  1-                   Decrement input
    1                  Push 1
     [..........]      Loop, always runs once, then decrements first item on stack at ]
                       Breaks out of loop if first item on stack reaches 0
      1,!/             Push 1, swap last 2 values, and divide without popping
                       Original values are kept on stack, and result of division is pushed
          M,$_         Move result of division to next stack, then swap last 2 items and
                       Silently pop last item (1)
              1+       Increment last item on stack
                 v&+   Move to next stack, sum entire stack 
                       Implicit output of last item on current stack

다음 은 float를 지원 하는 수정 된 인터프리터 입니다. 첫 번째 인수가 입력됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.